我有很多内存泄漏的问题。
CRT 在以下代码中显示泄漏,例如:
char *cmd = new char[128];
我应该怎么办?
char *cmd = new char[128];
delete[] cmd;
我使用上面的代码使用 VLD(Visual Leak Debugger)启动了新项目,但它仍然说我正在泄漏。
我有很多内存泄漏的问题。
CRT 在以下代码中显示泄漏,例如:
char *cmd = new char[128];
我应该怎么办?
char *cmd = new char[128];
delete[] cmd;
我使用上面的代码使用 VLD(Visual Leak Debugger)启动了新项目,但它仍然说我正在泄漏。
利用:
std::vector<char> cmd(128);
每当您需要访问 char* 缓冲区时,您可以执行以下操作:
char* memory = &char[0]
因为内存保证为 std::vector 继续。无需删除,因为内存归对象所有。这使您的代码也异常安全,例如,如果在执行 delete [] 之前抛出异常,您将不会泄漏内存
如果要在堆栈上分配,也可以使用 C++11 中的新 std::array
可能是您的对象在泄漏检测运行后被删除。
例如,如果您有静态对象,则必须注意删除顺序,以便在泄漏检测发生之前删除它们。
尝试在函数中嵌入new/delete,看看是否仍然报告泄漏:如果没有,那么问题可能确实与执行泄漏检测后被删除的对象有关。
您应该调用delete[] arrayVariable;
而不是delete arrayVariable;
避免与数组有关的内存泄漏。