Pointeurs et sécurité

Résolu
Jin31 - 3 oct. 2012 à 12:57
 Jin31 - 3 oct. 2012 à 14:06
Bonjour,

est-il nécessaire de mettre a NULL un pointeur temporaire à la fin d'une routine par exemple "par sécurité" ?

Exemple :

void String::append(const char *chain) {

    unsigned int result_lenght = m_lenght + lenghtOf(chain);
    char *result_chain = new char[result_lenght+1];

    for (unsigned int i = 0; i < m_lenght; i++)
        result_chain[i] = m_chain[i];

    delete[] m_chain;

    for (unsigned int i = m_lenght; i < result_lenght; i++)
        result_chain[i] = chain[i - m_lenght];

    result_chain[result_lenght] = '\0';

    m_chain = result_chain;
    m_lenght = result_lenght;

    result_chain = NULL; // conseillé??????????????
}


Je remercie celui ou celle qui m'accordera un peu de son temps!

3 réponses

cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
3 oct. 2012 à 13:27
Bonjour.

Tout d'abord, si tu fais du C++, je te déconseille l'utilisation de NULL, au profit de 0, voir: http://0217021.free.fr/portfolio/axel.berardino/articles/null-en-cpp

Mettre à 0 un pointeur sur chaîne, ne fait en rien de la sécurité. Dans le cas présent, "result_chain" étant une variable locale, elle sera détruite. La mettre à 0 ne sert à rien.

Le seul cas où cela peut être utile, est si tu réutilises cette variable plus tard. Néanmoins, c'est un cas qui ne devrait pas arriver très souvent si tu codes proprement.
Ex:
char* result_chain = new char[result_lenght+1];
delete[] result_chain;

... // plus loin

if (!result_chain) // Problème ici si l'on n'a pas result_chain à 0.
  result_chain = new char[result_lenght+1];


Pour l'éviter, on peut effectivement mettre result_chain à 0, ou mieux, ne pas réutiliser les variables.
Ex:
char* result_chain = new char[result_lenght+1];
delete[] result_chain;

... // plus loin
char* result_chain2 = new char[result_lenght+1];


________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
3
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
3 oct. 2012 à 13:29
Pour bien répondre à ta question, le:
"result_chain = NULL; // conseillé??????????????"
Ne sert absolument à rien du tout. Tu peux donc le retirer.

________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
3
Je vous remercie pour toutes ces précisions!
0
Rejoignez-nous