当我在以下程序上运行valgrind时,它报告内存泄漏。你能解释原因吗?

#include <string>
#include <iostream>

using namespace std;

int main()
{
    char * arr = (char *) ::operator new(sizeof(char));
    string s = arr;

    return 0;
}
  • 字符串s = arr上会发生什么?它会复制arr吗?
  • 最佳答案

    valgrind是正确的。您调用new而不调用delete,因此内存泄漏。

    当您将arr分配给s时,后者不拥有前者的所有权;而是制作副本。释放arr仍然是您的责任。

    关于c++ - 使用C++字符串时发生内存泄漏,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15390309/

    10-16 19:10