可能的内存泄漏?

Luc*_*ore 0 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);
}
Run Code Online (Sandbox Code Playgroud)

离开一切不谈,char* xcustomHandleException()将指向分配的字符数组foo().这会导致内存泄漏还是删除工作?

Alo*_*ave 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*)标准库中的操作符的值应该是由a返回的值之一.以前调用任何一个operator new[](std::size_t)operator new[](std::size_t, const std::nothrow_t&)在标准库中.