可能的内存泄漏?

时间:2011-09-14 15:37:43

标签: c++ memory-leaks

我有以下代码:

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);
}

将所有其他内容放在一边,来自char* x的{​​{1}}将指向customHandleException()中分配的字符数组。这会导致内存泄漏还是删除工作?

1 个答案:

答案 0 :(得分:6)

您应该使用delete[]。分配有new[] 必须的内存将被delete[]取消分配。

参考:

C ++ 03标准:§3.7.4.2-3

  

如果通过抛出异常终止释放函数,则行为未定义。提供给解除分配函数的第一个参数的值可以是空指针值;如果是这样,并且如果解除分配功能是标准库中提供的功能,则该呼叫无效。否则,提供的值   标准库中的运算符delete(void*)应该是先前调用标准库中的运算符new(std::size_t)operator new(std::size_t, const std::nothrow_-t&)返回的值之一,以及提供给运算符的值标准库中的delete[](void*)应该是先前调用operator new[](std::size_t)或者operator new[](std::size_t, const std::nothrow_t&)返回的值之一   标准库中的{{1}}。