提问人:Luchian Grigore 提问时间:9/14/2011 最后编辑:Luchian Grigore 更新时间:9/14/2011 访问量:127
可能的内存泄漏?
Possible memory leak?
问:
我有以下代码:
void customHandleException (_EXCEPTION_POINTERS* ExceptionInfo)
{
char* x = (char*)ExceptionInfo->ExceptionRecord->ExceptionInformation[0];
delete[] x;
}
void foo()
{
char* x = new char[ 256 ];
ULONG_PTR* args = new ULONG_PTR[1];
args[0] = (long)x;
RaiseException(EXCEPTION_CODE,0,1,args);
}
撇开其他所有因素不谈,from 将指向 中分配的 char 数组。这会导致内存泄漏还是删除有效?char* x
customHandleException()
foo()
答:
6赞
Alok Save
9/14/2011
#1
您应该使用 .使用 分配的内存必须使用 解除分配。delete[]
new[]
delete[]
参考:
C++03 标准:§ 3.7.4.2-3
如果释放函数因引发异常而终止,则行为未定义。提供给释放函数的第一个参数的值可以是空指针值;如果是这样,并且如果释放函数是标准库中提供的函数,则调用无效。否则,提供的值 标准库中的 to 运算符应是先前调用任一运算符或标准库中返回的值之一,提供给标准库中运算符 delete[](void*) 的值应是先前调用运算符 new[](std:
:size_t) 或运算符 new[](std
::size_t,const std::nothrow_t&)。
delete(void*)
new(std::size_t)
operator new(std::size_t, const std::nothrow_-t&)
评论
0赞
Luchian Grigore
9/14/2011
除此之外,还会有内存泄漏吗?这是一个错别字:)
0赞
Alok Save
9/14/2011
@Luchian:只要你用返回的相同地址拨打电话,就不会有任何泄漏。delete[]
new[]
0赞
sharptooth
9/15/2011
@Luchian Grigore:好吧,如果是错别字,你的代码从一开始就没问题。
评论