2 Stimmen

Segmentationsfehler: Warum?

Ich habe dieses Stück Code, das kompiliert und wie erwartet funktioniert:

#include 

using namespace std;

int fun(int* p){
    *p = 20;
    return 1;
}

int main(){
    int* number;    
    *number =10;

    cout << "before: "<<*number<


Während der folgende zu einem Segmentation-Fehler führt:

    #include 

    using namespace std;

    int fun(int* p){
        *p = 20;
        return 1;
    }

    int main(){
        int test=1; //ADDITION
        int* number;    
        *number =10;

        cout << "before: "<<*number<

``

Ich kompiliere mit `g++ test.cpp -o test`

Kann mir jemand erklären, woher dieses Verhalten kommt?

`` ```

1voto

Vishnu Pedireddi Punkte 2052

Ich denke nicht, dass "int test = 1" in diesem Fall irgendeine Bedeutung hat. Allerdings zeigt der Integer-Zeiger auf eine Zufallszahl (die eine zufällige Speicheradresse darstellt), wenn er initialisiert wird. Versuchen Sie folgendes: Ersetzen Sie das Vorkommen von *number = 10 durch number = new int(); *number = 10; Wenn eine solche Initialisierung erfolgt, wird Speicher vom Heap zum Zeiger allokiert. Und vergessen Sie nicht, den Zeiger am Ende des Programms mit dem "delete"-Operator zu löschen.

1voto

luis.espinal Punkte 10122

Sie haben vergessen, Speicherplatz für Ihren number Zeiger zuzuweisen. Wenn das passiert, ist das Programmverhalten undefiniert. Es stellt sich heraus, dass es in einem Fall lief, aber nicht später.

Ändern Sie entweder Ihre Variablen in einfache int,

int number = 10;

oder führen Sie ein new an ihnen durch

int *number = new int[1];
*number = 10;

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X