请问:
char * GetBuf()
{
   char * p = new char[100];
   sprintf(p,"this is a test");
   return p;
}
main()
{
  char * p=GetBuf();
  printf("%s",p);
}
在上面的简单程序中,在GetBuf函数中分配的内存空间是怎么释放的?在什么时候释放?多谢了。

解决方案 »

  1.   

    main()
    {
      char * p=GetBuf();
      printf("%s",p);
      delete[] p; // Add this
    }
      

  2.   

    你在char *p = GetBuf();之后,你认为什么时候p这个东西已经是不需要的了,就调用delete[] p;释放就可以了。否则将内存泄漏。new分配的空间,应用程序是不会自动帮你释放的。
      

  3.   

    多谢了,另外还有一个问题,请教两位牛人。
    如果这样用
    void GetBuf(char * p)
    {
       sprintf(p,"this is a test");
    }
    main()
    {
      char * p = new char[100];
      GetBuf(p);
      printf("%s",p);
      delete[] p;
    }
    两种用法有什么不同?各有什么优缺点?
      

  4.   

    效果上一样,但建议使用第二种。作为一个原则:谁分配的空间,应该由谁来释放。第一种方法,空间在GetBuf中申请,而在Main中释放,这样不好。因为如果多人合作时,如果一个人写GetBuf函数,一个人写Main函数的话,就会带来麻烦,也可以说是增加了函数之间的耦合度。而第二种方法就不会有这个问题。GetBuf函数只管用这个指针,而不用管这个空间从哪里来,到哪里消除。
      

  5.   

    还是 happyparrot(快乐鹦鹉) 说话中规中举。
    这是编程的一个原则,要好好学习。