char *Buffer;
CString Dest;
Buffer=new char[100];
_lread(HFile,(LPVOID)Buffer, 100);
Dest=Buffer;
if(Buffer!=NULL)
delete[] Buffer;//这种释放内存的方式有时候会出现不可以预料的异常,譬如自动退出程序如果改成以下的方式释放,那么就不会出异常,请问下面这种方式可以吗?是否安全?
if(Buffer!=NULL)
{
Buffer=NULL;
delete[] Buffer;
}
CString Dest;
Buffer=new char[100];
_lread(HFile,(LPVOID)Buffer, 100);
Dest=Buffer;
if(Buffer!=NULL)
delete[] Buffer;//这种释放内存的方式有时候会出现不可以预料的异常,譬如自动退出程序如果改成以下的方式释放,那么就不会出异常,请问下面这种方式可以吗?是否安全?
if(Buffer!=NULL)
{
Buffer=NULL;
delete[] Buffer;
}
如果Buffer==NULL岂不是泄漏了
直接delete[] Buffer;
if(NULL==Buffer)MessageBox("申请内存失败!");2.if(Buffer!=NULL)
delete[] Buffer;//这种做法是正确的
下面的做法是错误的:
if(Buffer!=NULL)
{
Buffer=NULL;
delete[] Buffer; // 这里Buffer已经为NULL,delete操作有何意义
}Y___Y(一叶障目) 的话很搞笑,如果Buffer==NULL岂不是泄漏了?Buffer为NULL说明没有申请内存成功,何来泄漏3.你说这种释放内存的方式有时候会出现不可以预料的异常,譬如自动退出程序,我估计(注意是估计)是因为Dest=Buffer;这一句造成的。你把一个char*指针赋给一个CString对象,这没有什么大错,二者共享一片内存,但是最后你把char*指针拥有的内存释放了,但是CString对象的内存也没有了,但是CString对象的析构机制我们是不了解的,你这样把CString对象的内存去掉,CString对象自然要报错。
这样Dest=Buffer; 同是char*型,不存在CString对象析构问题,可以安全释放内存。
if(Buffer!=NULL)
{
Buffer=NULL;
delete[] Buffer;
}
是不是应该改为:
if(Buffer!=NULL)
{
delete[] Buffer;
Buffer=NULL;
}
先删除Buffer这个数组的内容,然后将这个指针置空