Retourner au contenu associé (entrée de forum : free() or not free() ?)
Posté par schyzomarijks le 23 février 2005 à 11:27. En réponse au message free() or not free() ?. Évalué à 2.
AltStyle によって変換されたページ (->オリジナル) / アドレス: モード: デフォルト 音声ブラウザ ルビ付き 配色反転 文字拡大 モバイル
[^] # en repassant
Posté par schyzomarijks . En réponse au message free() or not free() ?. Évalué à 2.
Si un autre programmeur fait un truc du genre :
if (m_ptr->value == 0 ) MYFREE(ptr);
return m_ptr;
Ta macro sera développée comme :
if (m_ptr->value == 0 ) assert(ptr!=NULL);
free(ptr);
ptr=NULL;
return m_ptr;
Là, tu as une destruction du pointeur quelque soit les conditions.
Ta macro doit être écrite :
#define MYFREE(ptr) { assert(ptr!=NULL); free(ptr); ptr=NULL; }
Mais d'une manière générale, il faut mieux éviter des macros et faire des fonctions inline (et oui, on peut faire du inline en C )