我遇到了大量内存泄漏的问题。
CRT显示在以下代码中泄漏,例如:
char *cmd = new char[128];
我该怎么办?
char *cmd = new char[128];
delete[] cmd;
我使用VLD(Visual Leak Debugger)开始了上面代码的新项目,它仍然说我在泄漏。
答案 0 :(得分:3)
答案 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