C++ linux c+中的内存释放+;?

C++ linux c+中的内存释放+;?,c++,linux,memory,malloc,free,C++,Linux,Memory,Malloc,Free,在我的应用程序中,我使用malloc()为变量(unsigned char*)分配内存,当尝试在析构函数中释放该内存时,我使用此条件来避免双重损坏 unsigned char *wsqData; wsqData= (unsigned char *)malloc( 10000*sizeof( unsigned char)); 在我的析构函数中 if(wsqData!=NULL) { free(wsqData); wsqData=NULL; } 现在的问题

在我的应用程序中,我使用
malloc()
为变量(
unsigned char*
)分配内存,当尝试在析构函数中释放该内存时,我使用此条件来避免双重损坏

unsigned char *wsqData;
wsqData= (unsigned  char *)malloc( 10000*sizeof( unsigned char));
在我的析构函数中

  if(wsqData!=NULL)
  {
      free(wsqData);
      wsqData=NULL;
  } 

现在的问题是,当我在析构函数之前释放内存时,这个“如果条件”不能正常工作,它会再次尝试释放该变量,从而导致双重损坏错误。这种情况下出现了什么问题?

当您在析构函数外部释放内存时,需要将
wsqData
设置为
NULL
。但是C++中应该使用<代码>新< /COD>和<代码>删除< /代码>。并尽量避免将内存释放到析构函数之外的任何位置。

在内存上调用
free
不会自动将指针设置为
NULL
,因此您的条件是无意义的。您需要将
wsqData
设置为
NULL
,无论您在哪里释放它


当然,这个条件无论如何都是没有意义的,因为在
NULL
指针上调用free可以保证安全。

正如其他人所指出的,每次释放它时也需要将其设置为NULL。使其成为一个函数-释放var,然后将其设置为NULL,并从析构函数和程序中的任何位置调用它

仅供参考:这是一个典型的例子。你需要将<代码> WQDATS</代码>设置为<代码> null >代码>。

为什么你使用C内存管理来定义C++程序?如果你想释放两次,那么代码中就有bug了。您尚未显示代码,因此很难给出建议…为什么要释放不同位置的内存?