私はHDF5を使用して、char*
によって割り当てられた文字列に文字列を読み込みますnew[]
。次に、string ::assign()呼び出しを使用して、このデータを実際に必要な場所にコピーします。delete[]
次に、そのchar*を呼び出します。これは、totalviewを使用したメモリリークの原因として表示されています。stdlibc ++で、、、、、およびの間にマングルされた呼び出しが表示delete[]
されます。何が起こっているのですか、これは本当にメモリリークですか?私もここに設定しました。replace_safe
mutate
create
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;
}