2010-11-11 27 views
0

Je voudrais un exemple simple sur la façon d'utiliser l'outil Leaks.
voir:Utilisation simple de l'instrument Leaks sur une application console

#include <iostream> 

int main (int argc, char * const argv[]) { 
    char *buf = new char[100]; 

    sprintf(buf, "Hello, World!\n"); 
    // insert code here... 
    std::cout << buf; 
    return 0; 
} 

le code ci-dessus (exemple simple) fuiraient le pointeur alloué sur * buf, non?
avec valgrind je trouverais cela très facile après une course
mais je ne peux pas trouver comment faire cela sur le programme Fuites
J'ai essayé de mettre le sommeil (60), mais il est toujours pas facile pour moi .. .

grâce,
Jonathan

+0

Demandez quelque chose. En outre, vous n'avez aucune fuite dans le code indiqué. –

+0

Il dit parce qu'il ne libère pas buf, c'est une fuite, mais puisque le programme se termine juste après je ne sais pas si cela compte comme une fuite que la mémoire sera restaurée juste après. Aussi je pense qu'il devrait être 'char * buf' pas 'char buf' – robev

+0

Peut-être 'char * buf'? – Vlad

Répondre

0

J'ai trouvé que Fuites ne fonctionne pas si bien avec des applications en ligne de commande qui sortent rapidement. Je suggère d'ajouter un sleep() comme vous avez fait, mais en ajouter un avant la logique du programme principal, et encore à la fin, de sorte que les fuites est susceptible d'échantillonner l'état de fuite.

int main() { 
    sleep(20); // 20s may be enough 
    { 
    // do leaky operations, then local variables will go out of scope 
    } 
    sleep(20); 
} 
+0

pouvez-vous me donner un exemple d'une application simple qui fuit quelque chose et vous pouvez le voir sur l'outil de fuites? – Jonathan

+0

Je ne l'ai pas essayé depuis un moment, mais j'ai réussi à obtenir une sortie utile avec un retard au début et à la fin. Vous pouvez également essayer de vous attacher au processus (donc vous l'attrapez pendant la première période de sommeil). Essayez également de créer une marque à ce point afin qu'elle montre les deltas à partir de ce point. –