Problem bei Code



  • Hallo,

    ich sitze gerade an einer alten Programmierprüfung zu der ich leider keine Lösung habe und weiss bei folgender Aufgabe nicht was falsch ist.

    Aufgabenstellung:
    Welches Problem können Sie bei folgendem Programm erkennen?

    int main()
    {
        int *xa=NULL;
    
        if(xa==NULL){
    
            int x=10;
            xa=&x;
            printf("x=%d\n", x);
        }
        printf("x=%d\n", *xa);
    
    }
    

    Ich würde sagen es hat etwas damit zu tun, dass die Variable x in der if-Anweisung deklariert und initialisiert wird und danach mit *xa darauf zugegriffen wird. Ist aber nur geraten. Keine Ahnung ob das stimmt.

    Was meint ihr?

    Wenn ich das Programm ausführe läuft es ohne Probleme.

    Danke


  • Mod

    asdfbcd schrieb:

    Was meint ihr?

    Du meinst das richtige, drückst dich aber eventuell etwas unglücklich aus. Der Gültigkeitsbereich von x endet in Zeile 10. Da xa auf x zeigt, ist eine spätere Dereferenzierung undefiniertes Verhalten.

    Wenn ich das Programm ausführe läuft es ohne Probleme.

    Undefiniertes Verhalten bedeutet auch, dass etwas wider Erwarten funktionieren darf. Das ist vielleicht sogar der fieseste Fall, da du den Fehler nicht bemerkst. Es läuft beim Testen, aber wenn du dann für die Demonstration vorm Chef die Optimierungen einschaltest, funktioniert es plötzlich nicht mehr.

    PS: Ein aussagekräftigerer Threadtitel wird hier gerne gesehen. Dass du Probleme mit Code hast und nicht über's Wetter reden möchtest, kann man sich bereits denken, wenn du in diesem Forum einen Thread startest.


Log in to reply