2016-03-31 12 views
-3

lassen Sie uns sagen, dass ich eine Zeigervariable definieren einiger Klassentyp ptrClass sein:warum tut dies if-Anweisung nicht seg Fehler [C++]

ptrClass *ptr; 

und lassen Sie uns dieses ptrClass sagen hat eine Memberfunktion get() aufgerufen, die eine zurückgibt Zeiger, der auf nichts zeigt.

also, wenn wir tun:

ptr->get(); 

dies in einem seg Fehler führen würde.

aber wenn wir if(ptr->get()) tun, führt dies nicht zu einem seg-Fehler (die if-Anweisung wird einfach nicht ausgeführt). Kann jemand erklären, warum das so ist? Muss das Programm ptr->get() ausführen, was zu einem seg-Fehler führen sollte, um die if-Anweisungsbedingung zu überprüfen?

+0

Können Sie uns einen minimalen Beispielcode zeigen, der den Fehler reproduziert? Wir wissen nichts über ptrClass – KABoissonneault

+1

Sie haben einfach ** undefiniertes Verhalten ** Dereferenzierung eines nicht initialisierten 'ptrClass * ptr;' -Zeigers, die Ihr Beispiel gut beweist. –

+1

Die Verwendung von 'ptr-> get()' ist ein undefiniertes Verhalten, wenn 'ptr' nicht auf ein gültiges Objekt zeigt. Es macht keinen Sinn, ein undefiniertes Verhalten zu verstehen. Per definitionem ist es undefiniert. Alles kann passieren. –

Antwort

1

Code mit Fehlern darin wird Dinge tun, die Sie nicht erwarten. Es ist wirklich so einfach. Repariere den Fehler und das Geheimnis wird verschwinden.

1

Aufrufmethode des ungültigen Zeigers ist undefiniertes Verhalten, alles kann passieren.

Sie zeigen nicht, was get() tun, aber wenn get() nicht this nicht verwendet und ist nicht virtual, wird das Programm nicht dereferenzieren ptr so wird es nicht einen ungültigen Zeiger verwenden.

Verwandte Themen