Maison  >  Article  >  développement back-end  >  Pourquoi l’appel d’une méthode sur un pointeur nul en C fonctionne-t-il parfois ?

Pourquoi l’appel d’une méthode sur un pointeur nul en C fonctionne-t-il parfois ?

Susan Sarandon
Susan Sarandonoriginal
2024-10-28 08:40:30513parcourir

 Why Does Invoking a Method on a Null Pointer in C   Sometimes Work?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn