在我应用程序中,我使用malloc()为我的变量(unsigned char*)分配了内存,当尝试在析构函数中释放内存时,我使用这个条件来避免双重损坏。
unsigned char *wsqData;
wsqData= (unsigned char *)malloc( 10000*sizeof( unsigned char));在我的析构函数中
if(wsqData!=NULL)
{
free(wsqData);
wsqData=NULL;
} 现在的问题是,当我在我的析构函数之前释放内存时,这个"if条件“不能正常工作,它再次尝试释放那个变量,它导致了双重损坏错误。这个场景中的问题是什么?
发布于 2012-04-23 16:19:31
在内存上调用free不会自动将指针设置为NULL,因此您的条件是没有意义的。无论您在何处释放wsqData,都需要将其设置为NULL。
当然,这个条件无论如何都是没有意义的,因为在NULL指针上调用free肯定是安全的。
发布于 2012-04-23 16:19:08
在析构函数之外释放内存时,您需要将wsqData设置为NULL。但在C++中,您应该使用new和delete。并尽量避免在析构函数以外的任何地方释放内存。
发布于 2012-04-23 16:29:16
正如其他人所指出的,您还需要在每次释放它时将其设置为NULL。让它成为一个无函数的var,然后将它设置为NULL,并从析构函数和程序中的任何地方调用它。
https://stackoverflow.com/questions/10277043
复制相似问题