可能的内存泄漏?

Possible memory leak?

提问人:Luchian Grigore 提问时间:9/14/2011 最后编辑:Luchian Grigore 更新时间:9/14/2011 访问量:127

问:

我有以下代码:

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* xcustomHandleException()foo()

C++ 内存泄漏

评论

2赞 Kerrek SB 9/14/2011
用户代码中不允许使用下划线大写名称;它们保留给编译器和标准库。
2赞 Mooing Duck 9/15/2011
不,这是一个很好的评论。如果这是一个答案,那么它就没有抓住重点。

答:

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:好吧,如果是错别字,你的代码从一开始就没问题。