我正在使用 HDF5 将字符串读入char*
分配的new[]
. 然后我使用 string::assign() 调用将此数据复制到我真正想要的位置。然后我调用delete[]
那个 char*。这显示为使用 totalview 的内存泄漏的来源。它显示了 stdlibc++ 中delete[]
to replace_safe
、mutate
、create
、 then下的错误调用malloc
。发生了什么事,这真的是内存泄漏吗?我也设置GLIBCXX_FORCE_NEW=1
在这里。
这是复制这种情况的示例代码。请注意,valgrind 显示没有泄漏,如果我没有在cout
调用之前放置断点,totalview 没有发现泄漏。
#include <string>
#include <iostream>
#include <cstdlib>
int main()
{
std::string str;
int len = strlen(getenv("PATH"));
char* x = new char[len + 1];
strcpy(x, getenv("PATH"));
x[len] = '\0';
str.assign(x);
delete[] x;
std::cout << str << std::endl;
}