我正在使用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