2017-11-28 4 views
-2
int *a=500; 
    *a=3; 
printf("%d",*a); 

siehe oben Code.Einstellung der gewünschten Speicheradresse Fehler

Ich möchte die Adresse 500 des Speichers auf 3 setzen. Aber wenn ich diesen Code kompiliere, erhalte ich einen Fehler (Segmentierungsfehler). Was ist das Problem?

+2

Adresse 500? Warum 500? Auch "Ich bekomme einen Fehler." ist so nützlich wie "Es funktioniert nicht". Fügen Sie bitte die Fehlermeldung hinzu. – tkausl

+0

ist es gerade bearbeitet –

+0

zum Beispiel 500.Ich möchte einen Platz im Speicher setzen. warum kann ich nicht? –

Antwort

1

Weil Sie erhielten eine Ausnahme bedeutet, dass Sie diese unter einem O laufen. Das Schreiben auf Adresse 500 ist sehr wahrscheinlich außerhalb Ihres Prozessspeicherabbilds und außerhalb des Stacks.

Glücklicherweise Speicherschutzeinheit, lässt Sie nicht schreiben, wo immer Sie wollen.

3

Dies ist ungültig:

int *a=500; 

Sie können nicht nur eine beliebige Adresse in eine Zeigervariable zuweisen und erwarten, dass es an jedem Ort nützlich zeigt. Sie können so etwas nur auf eingebetteten Plattformen mit genau definierten Adressen für bestimmte Geräte tun.

Sie können nur die Adresse eines austretenden Variablen zuweisen oder eine durch eine Speicherzuordnungsfunktion zurück Adresse wie malloc:

int b; 
int *a = &b;     // valid 
int *c = malloc(sizeof(int)); // valid 
int *d = 500;     // not valid