重新初始化同一指针时,while 循环中是否会发生内存泄漏
Does memory leak in a while loop when the same pointer is reinitialized
这会导致内存泄漏吗?
while(true){
std::string* items = new std::string[size];
if (SOME_CONDITION){
//do something
}
}
delete[] items;
while 循环可能会迭代数百次,但会调整同一个指针的大小,因此我认为它不会导致内存泄漏。
是的,这会导致内存泄漏。如果你调用 new[]
两次,你将分配两块内存。如果您调用 delete[]
一次,您只会释放其中一个。
我不明白你说的“调整了同一指针的大小”是什么意思。在这个循环中没有调整大小,它只是在每次迭代中分配一个新的内存块。
这是一个简单的修复方法:
std::string* items = nullptr;
while(true){
delete[] items;
items = new std::string[size];
if (SOME_CONDITION){
//do something
}
}
delete[] items;
更传统的做法是这样的:
while(true){
std::string* items = new std::string[size];
if (SOME_CONDITION){
//do something
}
delete[] items;
}
更好的方法是使用 new
以外的东西,例如 std::unique_ptr
.
这会导致内存泄漏吗?
while(true){
std::string* items = new std::string[size];
if (SOME_CONDITION){
//do something
}
}
delete[] items;
while 循环可能会迭代数百次,但会调整同一个指针的大小,因此我认为它不会导致内存泄漏。
是的,这会导致内存泄漏。如果你调用 new[]
两次,你将分配两块内存。如果您调用 delete[]
一次,您只会释放其中一个。
我不明白你说的“调整了同一指针的大小”是什么意思。在这个循环中没有调整大小,它只是在每次迭代中分配一个新的内存块。
这是一个简单的修复方法:
std::string* items = nullptr;
while(true){
delete[] items;
items = new std::string[size];
if (SOME_CONDITION){
//do something
}
}
delete[] items;
更传统的做法是这样的:
while(true){
std::string* items = new std::string[size];
if (SOME_CONDITION){
//do something
}
delete[] items;
}
更好的方法是使用 new
以外的东西,例如 std::unique_ptr
.