我正在使用HDF5将一个字符串读入由new[]
分配的char*
。然后我使用string :: assign()调用将这些数据复制到我实际需要的位置。然后我在该char *上调用delete[]
。这显示为使用totalview的内存泄漏源。它显示在stdlibC++ delete[]
到replace_safe
,mutate
,create
,然后malloc
下的损坏的调用。这是怎么回事,这真的是内存泄漏?我也在这里设置了GLIBCXX_FORCE_NEW=1
。malloc调用删除[]显示为内存泄漏总视图
以下是复制情况的示例代码。请注意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;
}
通过Valgrind的运行这个程序不产生任何警告。 “总堆使用情况:2个分配,2个释放,146个字节分配” – 2009-12-22 21:43:40
请问OP没有说自己? – 2009-12-22 22:22:23
难道你不能只是'str = getenv(“PATH”)'? – UncleBens 2009-12-22 23:13:50