0

我有很多内存泄漏的问题。

CRT 在以下代码中显示泄漏,例如:

char *cmd = new char[128];

我应该怎么办?

char *cmd = new char[128];
delete[] cmd;

我使用上面的代码使用 VLD(Visual Leak Debugger)启动了新项目,但它仍然说我正在泄漏。

4

4 回答 4

3

基本上,您需要在停止使用内存后立即释放它。

一些很好的自动化 C++ 技术是RAII智能指针

还可以考虑有关内存泄漏的Wikipedia 文章。

于 2012-04-30T14:03:59.560 回答
0

利用:

std::vector<char> cmd(128);

每当您需要访问 char* 缓冲区时,您可以执行以下操作:

char* memory = &char[0]因为内存保证为 std::vector 继续。无需删除,因为内存归对象所有。这使您的代码也异常安全,例如,如果在执行 delete [] 之前抛出异常,您将不会泄漏内存

如果要在堆栈上分配,也可以使用 C++11 中的新 std::array

于 2012-04-30T15:15:54.757 回答
0

可能是您的对象在泄漏检测运行后被删除。

例如,如果您有静态对象,则必须注意删除顺序,以便在泄漏检测发生之前删除它们。

尝试在函数中嵌入new/delete,看看是否仍然报告泄漏:如果没有,那么问题可能确实与执行泄漏检测后被删除的对象有关。

于 2012-04-30T14:49:22.587 回答
0

您应该调用delete[] arrayVariable;而不是delete arrayVariable;避免与数组有关的内存泄漏。

于 2012-04-30T14:12:56.560 回答