当我在以下程序上运行valgrind时,它报告内存泄漏。你能解释原因吗?
#include <string>
#include <iostream>
using namespace std;
int main()
{
char * arr = (char *) ::operator new(sizeof(char));
string s = arr;
return 0;
}
最佳答案
valgrind
是正确的。您调用new
而不调用delete
,因此内存泄漏。
当您将arr
分配给s
时,后者不拥有前者的所有权;而是制作副本。释放arr
仍然是您的责任。
关于c++ - 使用C++字符串时发生内存泄漏,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15390309/