Comprendre le comportement non défini : invocation de méthode de pointeur nul en C
En C, l'exécution du programme peut prendre des tournures inattendues lorsqu'il s'agit de pointeurs nuls. Cela est évident dans les cas où une méthode est invoquée via un pointeur nul, comme illustré dans l'extrait de code suivant :
<code class="cpp">#include <iostream> using namespace std; class Test { int i; public: Test() : i(0) { cout << "ctor called" << endl; } void show() { cout << "show fun called" << endl; } }; int main(int argc, char *argv[]) { Test *ptr = NULL; ptr->show(); return 0; }</code>
De façon inattendue, la fonction constructeur n'est pas invoquée malgré la tentative d'accès à la méthode show() via le pointeur nul ptr. Ce comportement vient du fait que le compilateur peut déterminer le type du pointeur nul, lui permettant d'identifier la méthode show(). Comme la méthode n'utilise pas le pointeur this, le code s'exécute sans problème.
Bien que pratique, ce comportement est considéré comme non défini par la norme C. Le compilateur est libre de générer du code qui peut se comporter différemment ou faire planter le programme. Par conséquent, s'appuyer sur un tel comportement est imprudent et peut conduire à des résultats imprévisibles.
Par conséquent, il est crucial d'éviter d'invoquer des méthodes via des pointeurs nuls en C . Assurez-vous toujours d'une initialisation correcte des pointeurs pour éviter un comportement indéfini et maintenir l'intégrité du programme.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!