对一个类实例化:myclass* pclass = new myclass();
我将这个类的指针传到了一个线程里去操作,操作结束想delete掉:delete pclass;
程序就在这完蛋了帮帮忙,谢谢

解决方案 »

  1.   


    delete pclass;
    这句话是放在哪里的?
      

  2.   

    delete pclass
    放在线程结束前
    -------------------------
    myclass* pclass = new myclass(); 
    CreateThread(workthread);UINT workthread(LPVOID lpParam)
    {
       myclass* pclass = (myclass*)lpParam;   delete pclass;   <------(就是在这里del的)
       return 0;
    }
      

  3.   

    不是当前线程new的就不要用delete,应该在new的那个线程去做
      

  4.   

    用delete 之前 最好先  if(pclass!=NULL){delete pclass; pclass=NULL;}
    写代码严谨点 还是又好处的。仅供参考。                    
      

  5.   

    to xkyx_cn: 我是在用到异步socket的那个类时遇到这个问题的,我必须在接受连接前new一个sock类对象,然后转入一个线程完成通信,你有什么好办法处理这种情况?谢谢
      

  6.   

    你delete的是pParam对应的内存
    这个不是你new的
    当然要死了
      

  7.   

    支持9楼的说法,通过指针传资源很容易出错,因为指针也是一种数据类型,在传递时也有临时空间。
    如:
    int *b;
    f(int *a)
    {
    a=new int[10];
    }//函数调用企图通过函数返回空间
    f(b);
    实际上,是将指针b空间的值复制给了临时指针空间a中,在函数退出后,并没有能够将空间返回。
    所以,需要这样传,传递指向指针的指针
    int **b;
    f(int **a)
    {
    *a=int[10];
    }
    //函数调用获取空间
    f(b);//因为在函数中直接修改了指针型数据b的空间,所以可以指向相同的位置
      

  8.   

    不好意思,我又琢磨了一下,好像不是new delete原因引起的。
      

  9.   

    继续这个帖子问:我在动态库里new出来一块内存,然后把这块内存的地址发给上层的应用程序,问:为什么我在上面的应用程序里delete就崩溃
      

  10.   

    :我在动态库里new出来一块内存,然后把这块内存的地址发给上层的应用程序,问:为什么我在上面的应用程序里delete就崩溃