J'utilise HDF5 pour lire une chaîne dans un char*
attribué par new[]
. J'utilise ensuite un appel string :: assign() pour copier ces données là où je le veux vraiment. J'appelle alors delete[]
sur ce char *. Cela apparaît comme la source d'une fuite de mémoire en utilisant TotalView. Il montre les appels mutés dans stdlibC++ sous delete[]
à replace_safe
, mutate
, create
, puis malloc
. Qu'est-ce qui se passe, et est-ce vraiment une fuite de mémoire? J'ai mis GLIBCXX_FORCE_NEW=1
ici aussi.Appel Malloc supprimer [] apparaissant comme fuite de mémoire dans totalview
Voici un exemple de code qui duplique la situation. Notez que valgrind ne montre aucune fuite et si je ne mets pas un point d'arrêt avant l'appel cout
, il n'y a pas de fuite trouvée par 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;
}
L'exécution de ce programme par valgrind produit aucun avertissement. "utilisation de tas totale: 2 allocs, 2 libère, 146 octets alloués" –
Will, OP n'a-t-il pas dit cela lui-même? –
Ne pouvez-vous pas faire 'str = getenv (" PATH ")'? – UncleBens