new[]
에 의해 할당 된 char*
에 문자열을 읽기 위해 HDF5를 사용하고 있습니다. 다음 문자열을 사용하여 :: assign() 호출이 데이터를 실제로 원하는 위치로 복사 할 수 있습니다. 그런 다음 해당 char *에 delete[]
을 호출합니다. 이것은 totalview를 사용하여 메모리 누수의 소스로 표시됩니다. stdlibC++에서 변경된 호출을 delete[]
에서,, create
, malloc
까지 표시합니다. 무슨 일이 벌어지고 있고, 이것은 정말 메모리 누수입니까? 나는 GLIBCXX_FORCE_NEW=1
도 여기에 놓았다.Malloc call on delete [] totalview에서 메모리 누출으로 나타납니다
다음은 상황을 복제하는 코드 예입니다. valgrind에는 누수가 표시되지 않으며, cout
호출 전에 중단 점을 두지 않으면 totalview에서 누수가 발견되지 않습니다.
하지만 표준 : : 벡터가 아닌 newing 문자의 배열을 사용하는 것이 좋습니다 것입니다 :
#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;
}
strcpy
이상 선호하지 않습니다. "총 힙 사용 : 2 할당, 2 해제, 할당 된 146 바이트" –윌, 그 OP 자신을 말하지 않았습니까? –
'str = getenv ("PATH")'할 수 없습니까? – UncleBens