以下哪项是正确的方法来避免内存泄漏?
//Option A
char* data = new char[4];
data = new char[5];
delete[] data;
//Option B
char* data = new char[4];
delete[] data;
data = new char[5];
delete[] data;
答案 0 :(得分:2)
选项A中有明显的内存泄漏。假设您已在某个内存位置new char[4];
和0x7256AC7D
分配了data
的内存,指向此位置。然后,在不删除此项的情况下,您已为new char[5];
和data
分配了另一个内存位置,指向此新位置。现在,您没有指向旧位置0x7256AC7D
的指针,也无法delete
。所以你正在泄露这段记忆。
在其他说明中,使用C ++ 11中的std::shared_ptr
或std::unique_ptr
可以更好或更轻松地避免此类泄漏。