Je viens d'écrire un code en C++ qui fait un peu de manipulation de chaînes de caractères, mais quand j'ai lancé valgrind dessus, il montre des fuites de mémoire possibles. En déboguant le code à un niveau granulaire, j'ai écrit un programme simple en C++ qui ressemble à ceci :
#include<iostream>
#include<cstdlib>
using namespace std;
int main()
{
std::string myname("Is there any leaks");
exit(0);
}
et en faisant tourner Valgrind dessus, j'ai obtenu.. :
==20943== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 26 from 1)
==20943== malloc/free: in use at exit: 360,645 bytes in 12,854 blocks.
==20943== malloc/free: 65,451 allocs, 52,597 frees, 2,186,968 bytes allocated.
==20943== For counts of detected errors, rerun with: -v
==20943== searching for pointers to 12,854 not-freed blocks.
==20943== checked 424,628 bytes.
==20943==
==20943== LEAK SUMMARY:
==20943== definitely lost: 0 bytes in 0 blocks.
==20943== possibly lost: 917 bytes in 6 blocks.
==20943== still reachable: 359,728 bytes in 12,848 blocks.
==20943== suppressed: 0 bytes in 0 blocks.
==20943== Reachable blocks (those to which a pointer was found) are not shown.
==20943== To see them, rerun with: --show-reachable=yes
Je me suis alors rendu compte que nous avions forcé la sortie (ce que j'avais fait dans mon code C++ original). Maintenant le problème est que je veux sortir du programme alors que mon ancien code attend le statut de sortie du nouveau code. Par exemple, le binaire a.out attend l'état de sortie de b.out. Y a-t-il un moyen d'éviter les fuites de mémoire, ou dois-je vraiment m'inquiéter des fuites de mémoire puisque le programme est déjà en train de se terminer à ce moment-là ?
Cela soulève également une autre question pour moi : un tel code est-il nuisible ?
#include<stdio.h>
#include<cstdlib>
int main()
{
char *p=(char *)malloc(sizeof(char)*1000);
exit(0);
}