为什么会出现'invalid pointer operation'?(200分)

  • 主题发起人 主题发起人 yinzt
  • 开始时间 开始时间
Y

yinzt

Unregistered / Unconfirmed
GUEST, unregistred user!
procedure dpthrd.processdata;
//一些声明
begin
Recv_Data := queue.Pop;
一些操作;
dispose(recv_data);
end;
这是一个线程类中一个函数.
其中,recv_data是一个结构,queue是主程序中声明的一个队列类.
调用这个线程后就会出现如题的提示.请高手指教!
 
线程访问共用数据必须做同步,信号灯啊,互斥对象啊,等等.无论如何一定要用,不用就会出问题.
 
楼上的情况我都试了,还是出现同样的问题.[:(]
 
建议:不要在线程和dll中使用string类型
 
如果Recv_Data只是一个结构记录,而不是一个记录指针的话,就不需要dispose(recv_data);了,这样会引起错误。
如果Recv_Data只是一个结构指针,操作时建议用互斥对象,另外当queue.Pop;没有值时会返回什么呢?nil吗?如果不是,请先在Recv_Data := queue.Pop;前写一句Recv_Data :=nil;
 
其实都不是上述的原因啦,是内存操作的问题。Recv_Data是一个结构指针,最后指向了一个数组,就没办法也没必要释放内存了。不过还是感谢各位的关注。[:)]
 
就这样结贴吧
 
后退
顶部