void *DATA()
{}
PUCHAR pRecv;
pRecv=(PUCHAR)DATA();delete []pRecv; //到这一步错误0x7c921230
pRecv=NULL;为什么不能DELETE呢

解决方案 »

  1.   

    pRecv并没有指向一个开辟的空间,肯定会出错。
      

  2.   

    在DATA函数内记录下new处理的指针的地址。
    delete []pRecv;时,比较两者,看是否一样。
    还有,仔细看pRecv的操作,是否有越界
      

  3.   

    我看也有人没有用 NEW也可以 DELETE阿
      

  4.   

    我看也有人没有用 NEW也可以 DELETE阿-----那是在别的地方new 了而在另个地方用完释放.
      

  5.   

    内存申请和释放都是成对出现的 
    即malloc/free和new/delete 都是成对的
    如果new的时候是一个数组,那么释放的时候在指针名前面一定要有[] 即delete [] 指针名
    你那段代码中pRecv也是不是用new,所有delete [] pRecv的时候当然就出错了
      

  6.   

    void* CFdadDlg::Data()
    {
    void * pub=NULL;
    pub="a";
    return pub;
    }void CFdadDlg::Recv()
    {
    PUCHAR pRecv;
    if ((pRecv=(PUCHAR)Data())!=NULL)
    delete[] pRecv;
    pRecv=NULL;}
    怎么改不出错
      

  7.   

    我搜索整个工程 都没有发现 NEW pRecv[***] 郁闷
      

  8.   

    void* CFdadDlg::Data() 

    void * pub=NULL; 
    pub="a"; 
    return pub; 
    } void CFdadDlg::Recv() 

    PUCHAR pRecv; 
    if ((pRecv=(PUCHAR)Data())!=NULL) 
    delete[] pRecv; 
    pRecv=NULL; } 
    怎么改不出错-----pub:你返回的是常量字符串的地址, 在静态储存区.
    它在程序运行期间是不会变的..!delete操作对象是在堆上的..pRecv是个局部变量, 是在栈上的.----锦涛主席能"性骚扰"到 来文斯基 吗...?
    hehe
      

  9.   

    你把delete []pRecv;这句注释掉,没有必要手工释放它指向的内存,
    因为只有用new申请的,在堆上分配的空间,才需用delete释放.