//line 2 causes the program to terminate
#include <stdio.h>
int main()
{
int *qi = 0; //1 -- making qi a null pointer
if(qi==NULL) printf("Null\n");
else printf("Not Null\n");
*qi =0; // 2 --- assigning *qi a decimal zero value.
return 0;
}
Kommentar Nummer 2 in dem obigen Code während das Programm beendetZuweisen dezimale Null auf einen C-Zeiger
qi = &zero;
in dem obigen Code eine Zeile hinzufügen, bevor Kommentar Nummer 2 Dieses unterhalb
wie gezeigt, verhindert// this code works fine
#include <stdio.h>
int main()
{
int *qi = 0; //1
if(qi==NULL) printf("Null\n");
else printf("Not Null\n");
int zero =0;
qi = &zero;
*qi= zero; //2
printf("%d\n",*qi);
return 0;
}
warum passiert das? Erklären Sie, als würden Sie einem Kind erklären.
Ohne richtig einen Block von 'sizeof int' Bytes an der Speicheradresse 0, die Anweisung' * qi = 0 '(vorane Zuteilung von ' qi = 0') ergibt undefiniertes Verhalten. Und mit 'qi = & zero' setzen Sie' qi', um auf einen richtig zugewiesenen Block von 'sizeof int' Bytes zu zeigen, was Ihnen erlaubt,' * qi = 0' sicher auszuführen. –
@barakmanos Danke :) – zerobyzero
Gern geschehen :) –