Maison > développement back-end > C++ > le corps du texte

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

Susan Sarandon
Libérer: 2024-10-28 08:40:30
original
534 Les gens l'ont consulté

 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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!