我有以下代码
void foo()
{
char* pcBlock = new char[1000];
...
delete[] pcBlock;
...
pcBlock = new char[100000];
...
delete[] pcBlock;
}
下面的代码是否会导致内存泄漏?
void foo()
{
char* pcBlock = new char[1000];
...
pcBlock = new char[100000];
...
delete[] pcBlock;
}
答案 0 :(得分:11)
是的,如果您在第一个delete[] pcBlock
中没有...
,则可能会发生内存泄漏。重新分配指针不会自动删除它先前指向的内容。
答案 1 :(得分:2)
运营商“新”和“删除”应成对使用。否则,使用“new”而不“删除”会导致内存泄漏。
答案 2 :(得分:1)
是的,先前分配的1000个字节未被释放,并且pcBlock被新的内存集替换。无法释放前1000个字节。这是一个内存泄漏。
答案 3 :(得分:1)
是的,它很可能会泄漏内存(除非编译器足够聪明,可以为你解决这个问题,但大多数都不会)。
也许你应该以某种方式尝试realloc。
答案 4 :(得分:0)
是的,它会的。可能你认为数组会重叠并删除因此将释放第一个数组,但事实上它们被分配给内存的不同部分。
答案 5 :(得分:0)
是否会导致内存泄漏
在C ++中有一个简单的规则:
new
的每次通话都应在结束时拨打delete
。
每new[]
- >与delete[]
。否则你会得到内存泄漏。
C ++是程序员应该自己控制动态内存(或使用第三方库)的语言。