#include <stdio.h>
int main(void)
{
int* ptr = NULL;
*ptr = 10;
printf("%d", *ptr);
return 0;
}
Ich bin sehr neu in der C-Programmierung und entschuldige mich im Voraus, wenn es unwissend rüberkommt. Ich versuche, einen Wert zu setzen und auf eine Zeigervariable zuzugreifen, die NULL zugewiesen ist, aber es funktioniert nicht.
Meine Vermutung ist, dass dies daran liegt, dass * ptr auf ein Array oder eine Variablenadresse zeigen soll und den Wert selbst nicht enthalten kann, ohne auf etwas zu zeigen.
Ist mein Verständnis richtig?
Lösung des Problems
Ja, Ihr Verständnis ist richtig, Sie können nicht das tun, was Sie mit dem Code versucht haben
int main(void)
{
int* ptr = NULL; <<== creates a pointer that points noweher (null)
*ptr = 10; <<== store 10 where that pointer points
printf("%d", *ptr);
return 0;
}
In der zweiten Zeile versuchen Sie, 10 zu speichern, wobei 'ptr' zeigt. Aber 'ptr' zeigt nirgendwo hin, das Ergebnis ist das, was Undefiniertes Verhalten genannt wird. Normalerweise wird Ihr Programm genau dort anhalten
Sie können dies stattdessen tun
int main(void)
{
int* ptr = NULL; <<<=== create pointer to nothing
int val = 0; << == create int with value 0
ptr = &val; <<<== set ptr to point at val
*ptr = 10; <<< ====overwrite val with 10
printf("%d", *ptr);
return 0;
}
die Linie
*ptr = 10;
macht dasselbe wie du
val = 10;
Sie können auch tun
int main(void)
{
int* ptr = NULL; <<<=== create pointer to nothing
ptr = malloc(sizeof(int); <<<== set ptr to point at dynamically allocated int
if(ptr==NULL) return -1; <<<=== make sure it worked
*ptr = 10; <<< === now set that dynamically allocated int to 10
printf("%d", *ptr);
return 0;
}
Beachten Sie, dass es im Gegensatz zum vorherigen Beispiel keine andere Möglichkeit gibt, darauf zu verweisen int
. (Sie konnten 'val' und '*ptr' vorher austauschbar verwenden)
Keine Kommentare:
Kommentar veröffentlichen