jeudi 17 juillet 2008

Chercher les fuites mémoire avec Debug Diagnostic tools de Microsoft


Il existe un outil (gratuit) publié chez Microsoft(tm) et qui permet de :

- Traquer les fuites mémoires d'un processus

- Trouver les crash systèmes windows (comme par exemple l'Access violation).



Voici le lien pour télécharger cet outil :





L'outil est relativement intuitif à utiliser, les rapports générés sont au format HTML et très verbeux ! (ce qui est assez classique pour un outil de ce type).
Sur ce, bon amusement.


lundi 7 juillet 2008

Tester le retour du "new" en C++

Bonjour,

Couramment les développeurs C++ se demandent s'il faut où pas tester le retour d'une tentative d'allocation dynamique, autrement dit :
Faut-il tester le retour du "new" en C++ ?
Faut-il vérifier que l'adresse retournée n'est pas nulle (valeur NULL) ?

A cette grande question il n'existe malheureusement pas qu'une seule réponse.

En fait c'est plus compliqué qu'il n'y paraît et le langage C++ n'est pas sensé retourner nécessairement une valeur nulle en cas d'échec (en effet le système d'exploitation peut ne pas vous donner la mémoire afférente à la demande !).

En fait en C++ il existe :

1. new
2. new(std::nothrow)

Le "new" simple ne retourne pas NULL mais une exception du type "std::bad_alloc". C'est assez surprenant et chacun ne s'attend pas en général à cette révélation.

exemple :

try
{
p = new X;
}
catch (std::bad_alloc &ex)
{
std::cout << "Echec d'allocation mémoire sur la heap";

}

L'exemple C++ ci-dessus montre comment l'on devrait tester la possibilité d'un échec d'allocation sur le tas (heap en anglais). Si vous persistez néanmoins dans votre idée de test du "new" à la valeur nulle (NULL) alors il convient d'utiliser cette recette :

X * _p;
_p = new(std::nothrow) X;

if (NULL == _p)
{
std::cout << "Echec d'allocation mémoire sur la heap";

}

Voilà le principal est dit, le C++ est décidemment parfois surprenant et moralité il faut se méfier des croyances populaires.

Heureusement la plupart des compilateurs soutiennent la croyance populaire et c'est bien ainsi.

Le débat est ouvert ...

Amicalement,