这是内存泄漏吗?应该怎么做?

时间:2010-01-24 12:52:56

标签: c++ memory-management

我有这样的事情:

void Test(void)
{
    char errorMessage[256];

    spintf(errorMessage,... blablabla);
    throw new CustomException(errorMessage);
}

这会是内存泄漏,因为errorMessage不会被释放吗?或者这会在try {} catch中访问异常消息时导致异常,因为在从函数中退出时已释放errorMessage?

提前致谢。

3 个答案:

答案 0 :(得分:7)

当catch处理程序访问时,errorMessage的内存将被释放。但是,您可以将其复制到std::string的构造函数中的CustomException

另一方面,内存泄漏可能是由异常本身引起的,因为你将它放在堆上。这不是必要的。

答案 1 :(得分:7)

答案是肯定的,非常可能。你永远不应该抛出用new创建的对象。相反,抛出值:

throw CustomException(errorMessage);

并使用const引用捕获:

try {
  ...
}
catch( const CustomException & e ) {
  ...
}

抛出值意味着编译器处理抛出对象的生命周期。此外,在您的代码中,如果异常类的复制构造函数不正确,您可能会遇到另一个问题 - 但是,这与异常处理没有任何关系。

答案 2 :(得分:0)

它不会导致内存泄漏,但可能会导致未定义的行为,具体取决于您对该异常执行的操作。我想只有在分配动态内存时才会发生内存泄漏

相关问题