C ++ CRT内存泄漏

时间:2012-04-30 14:02:43

标签: c++ memory-leaks

我遇到了大量内存泄漏的问题。

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

char *cmd = new char[128];

我该怎么办?

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

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

4 个答案:

答案 0 :(得分:3)

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

一些用于自动执行此操作的优秀C ++技术是RAIIsmart pointers

另请参阅有关memory leaks的维基百科文章。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

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

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

答案 3 :(得分:0)

使用:

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

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

char* memory = &char[0]因为std :: vector的内存保证会继续。 无需删除,因为内存由对象拥有。这使你的代码也异常安全,例如,如果在你执行delete []

之前抛出异常,你不会泄漏内存

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