大家都知道用new分配内存最后要用delete删除,以避免内存泄露.
现在有几种情况请问该怎么删除;
1.char buf=new[size];
  original-size=size;
  SomeFunction(buf,&size);   //返回时,buf的size发生了变化;buf内容也变化了
  delete [] buf ;//此时的大小是original-size,还是size
  
2.以下delete为什么出错?
  const char hello[] = "hello, hello!";
  long len = strlen(hello)+1;
  char *compr=new char[len]; //分配内存
  long comprLen=100;  int (*compress)(Byte *,long *,const Byte *,long);
  HINSTANCE ZlibHandle=LoadLibrary("zlib.dll");//调用dll
  compress=(int(*)(Byte *,long *,const Byte *,long)) GetProcAddress (ZlibHandle,"compress");
   
   int err;
   err = compress(compr, &comprLen, (const Byte *)hello, len);
   //comprLen,compr都发生了变化
  
   FreeLibrary(ZlibHandle);
   delete[] compr;///此处出错

解决方案 »

  1.   

    1. buf的size发生了变化;buf内容也变化了
    用new分配,怎么使buf的size变化?2. 还是这句话,用new分配,怎么使compr发生变化(不是指内容)?要是变化了,再去删除,当然出错。
      

  2.   

    1 ...   //返回时,buf的size发生了变化;buf内容也变化了
                     ~~~~~~~~~~~~~~~~~~~何以见得?
    难道莫非是这样的变化么???
    void SomeFunction(buf,&size) {
      size++;  ...  size++;
    }请你好好研究一下指针参数的传递,即使你在SomeFunction()中有:
    void SomeFunction(pBUF,&size) {
      ...
      pBUF = new char[new_size];
      ...
    }
    也不会影响到buf的"size"的!  delete [] buf ;//此时的大小是original-size
      

  3.   

    1.char buf=new[size];
      original-size=size;
      SomeFunction(buf,&size);   //返回时,buf的size发生了变化;buf内容也变化了
      delete [] buf ;//此时的大小是original-size,还是size
    ---it's orginal size. 
      
    2.以下delete为什么出错?
      const char hello[] = "hello, hello!";
      long len = strlen(hello)+1;
      char *compr=new char[len]; //分配内存
      long comprLen=100;  int (*compress)(Byte *,long *,const Byte *,long);
      HINSTANCE ZlibHandle=LoadLibrary("zlib.dll");//调用dll
      compress=(int(*)(Byte *,long *,const Byte *,long)) GetProcAddress (ZlibHandle,"compress");
       
       int err;
       err = compress(compr, &comprLen, (const Byte *)hello, len);
       //comprLen,compr都发生了变化
      
       FreeLibrary(ZlibHandle);
       delete[] compr;///此处出错----- you function broken the stack.if you had make sure there is no problem in you compress fun.
    try   int (WINAPI *compress)(Byte *,long *,const Byte *,long);
      compress=(int(WINAPI *)(Byte *,long *,const Byte *,long)) GetProcAddress (ZlibHandle,"compress");