重新初始化同一指针时,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.