2017-09-02 2 views
-2

Folgendes Programm gib mir Laufzeitfehler (Segmentation Fault (SIGSEGV)).Was ist eine freie Referenz?

Mein Lehrer sagte mir, es ist ein undefiniertes Verhalten, weil dangling Bezug. Hat er Recht? Wenn ja, wie kann man das vermeiden?

+0

Dafür muss es ein gutes Duplikat geben. – hyde

+0

Ja, Ihr Computer hat Recht, wenn er sich über Computerkram beschwert. Also, was ** ist ** der genaue Fehler? Kopieren Sie die Fehlermeldung und fügen Sie sie in Ihre Frage ein. Und ich bin mir nicht sicher, dass du einen * runtime * -Fehler bekommst; Ihr Compiler sollte Sie bereits warnen. –

+4

Ist Google wieder runter? – molbdnilo

Antwort

2

Ja, es ist in der Tat ein nicht definiertes Verhalten, weil Sie einen Verweis auf die automatische Variable zurückkommen, die zerstört werden, wenn die Ausführung von bar() abgeschlossen

Sie es durch Schreiben vermeiden:

#include <iostream> 
using namespace std; 

int& bar() 
{ 
    static int n = 10; 
    return n; 
} 

int main() { 
    int& i = bar(); 
    cout<<i<<endl; 
    return 0; 
} 

In diesem Fall Die statische Variable n wird nicht zerstört, wenn die Ausführung von bar() abgeschlossen ist. Sie wird zerstört, wenn Ihr Programm beendet wird.

Verwandte Themen