new 分配的空间要 delete 来释放

解决方案 »

  1.   

    要删除,而且删除的方法是 delete []p;
      

  2.   

    很简单,不管是否循环都会出错
    假设一下:
    p=new char(1024);
       //p=0x112233;//分配的堆内存
    p="sssssss';
       //p=0x332211;//这是常量字符串的地址
    delete p;//释放一个不是new分配的地址,不出错才怪!
      

  3.   

    当然会出错,通过new分配的空间要delete来释放,通过malloc分配的空间则用free来释放。
      

  4.   

    没错:delete p;//释放一个不是new分配的地址,不出错才怪!
      

  5.   

    memcpy(p,"sssss",1024);//这样就可以了
      

  6.   

    void a()
    { p=new char(1024);
    p="sssss";
             ~~~~~~~~~~~~~~~好像这里就不对了。上面分配的那1K内存已经丢失了,因为你的p改指向了"sssss"这个常量字符串的地址,所以下面的delete会出错。delete只能和new成对使用,释放堆里的内存空间,但是常量字符串"sssss"不是在堆里。至于是不是在栈里,我也不太清楚……
    printf(p);
    //delete p; // <<--这里一定应该要delete吗?为什么不注释它就会出错?
    //getchar();
    }
      

  7.   

    p=new char[1024];
    memcpy(p,"ssssss",1024);
    delete []p;that is ok!
      

  8.   

    顺便说一下,
    p=new char(1024);//是错误的
    并不是分配一个1024字节的区域
    而是使用1024去初始化分配的一个字符(会overflow)
    memcpy(p,"ssssss",1024);//会破坏对内存,当然p="ssss"也不对这是本程序的第二个错误!
      

  9.   

    p = new char[1024];
    strcpy(p,"sssss");
    ...
    delete[] p;
      

  10.   

    void a()
    { p=new char(1024);
    p="sssss";//*******去掉
    printf(p);
    //delete p; // <<--这里一定应该要delete吗?为什么不注释它就会出错?
    //getchar();
    }
    在vc编译其中选择MFC库,就没问题了
      

  11.   

    我试着帮你改一下,可以保持你的意图,又能去掉错误
    void a()
    {    p=new char(1024);
    //    p="sssss";        //comment by vince
        strcpy(p,"sssss");  //add by vince
        printf(p);
        delete p;        // 这样应该不会出错了
    }
      

  12.   

    在vc编译其中选择MFC库,就没问题了真的没问题?只是能编译通过而已,它存在严重的内存泄露问题
      

  13.   

    #include "stdafx.h"
    #include "stdio.h"
    void a(void);
    char * p;
    int main(int argc, char* argv[],char * env[])
    {
    for(int i=0;i<999;i++) a();
    return 0;
    }
    void a()
    { p=new char(1024);
    p="sssss";
    printf(p);
    //delete p; // <<--这里一定应该要delete吗?为什么不注释它就会出错?
    //getchar();
    }p=new char(1024);
     这句不对,因该是 p = new char[1024];
     如果是上面的写法,你就只分配了一个字符的空间,而下面这句你又将
    分配的p的地址重新给付值了,而这个地址是一个编译期间就确定的地址但是你下面又用 delete 来释放 p,这肯定会出错的总的来说,你这个程序问题多多