程序大概如下,不要考虑语法问题,
有一个函数
f()
{
   obj *p=new obj;  // 注释 1;
   if (a==b)
   {
      postmessage(A);
   }
   else
   {
      delete p;
   }
}线程A
A()
{
   obj temp;
   MSG msg;
   ...
   temp = msg.wParam;   //将值给temp,注释 2
   delete (obj*)msg.wParam;
   read(temp);          //注释3
}我在调试的时候在注释1处得到的地址值为1111,在注释2处的地址仍为1111,但在注释3处读出来的值却不对.是不是在函数f中用NEW开辟的内存在函数返回时就无法再用了?f在另一线程中调用的。表达能力有限,不明白问题的请直言.

解决方案 »

  1.   

    delete (obj*)msg.wParam;
    时已经释放了f中的obj;建议在f中改一点
    else if(obj!=NULL)
    {
       delete obj;
    }
      

  2.   

    我也认为是直到delete,可读出来的值错误,我郁闷呀!以前一直这么做都没错的.可别让我五一过不好呀!
      

  3.   

    查出来了,谢谢各位啦原来在
    obj *p=new obj
    之后对p memcpy时sizeof(p)了而不是sizeof(obj).所以虽然传过去的地址对,但可用的空间却不对.头痛呀!低级错误总是犯!兄弟们千万别相信自己用过了成千上百次的东西,致命的错误总是出现在我们怎么也不会认为会错的地方.
      

  4.   

    嗯,new 要知道delete才会释放,也就是运行时存在
    而楼主的数据错误,就需要考虑是否别的地方修改了,或本身数据赋值就不对