Я использую HDF5 для чтения строки в char*
, выделенном new[]
. Затем я использую вызов string :: assign (), чтобы скопировать эти данные туда, где я на самом деле их хочу. Затем я звоню delete[]
на этом персонаже *. Это обнаруживается как источник утечки памяти, используя 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;
}