动态数组第二次使用就出错!!(10分)

  • 主题发起人 主题发起人 lcl_003
  • 开始时间 开始时间
L

lcl_003

Unregistered / Unconfirmed
GUEST, unregistred user!
我定义了两个动态数组,在设置长度的时候好象第一次没事,第二次就会抱错,好象是内存
缢出:(
var
send,recv:array of byte;

setlength(send,10);
setlength(recv,27);
send[0]:=5;
send[1]:=0;
send[2]:=4;
send[3]:=tmp.a;
send[4]:=0;
comflag:=1; //之后在另一个线程里就会使用send,recv

然后我继续使用
setlength(send,6);
setlength(recv,62);
send[0]:=6;
send[1]:=0;
send[2]:=5;
send[3]:=tmp.a;

我设置断点发现在第一次setlength时没事,但是第二次就会报错:(
是那里有问题?
 
你第一次用完之后将数组释放一下就应该可以了
在第一次用完后加:
send := nil;
recv := nil;
 
没有问题呀,是不是其他哪里错了
 
是不是另一个线程里还在引用?
 
引用对象是否有冲突,线程是否要同步
 
具体在另一个线程中是否还在使用我不太确定。另一个线程中我是死循环不停的判断我的
send数组,如果有数就发,然后把收来的数据放到recv数组里,主线程会对recv进行一些
处理。这样不应该出问题吧。
 
我不能找到你的问题的原因,但是我将我对setlength(recv)的理解说出来供你参考.
setlength会在内存中重新为recv分配一个指定size的空间,然后将recv的原来空间释放掉。
如果你在别处以指针方式引用这个Array话,不更新这个指针是肯定要出错的。
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
后退
顶部