Bestimmen undefinierten Verhaltens für die Dereferenzierung nicht initialisierter Zeiger im C-Standard
Die gestellte Frage versucht, den spezifischen Abschnitt im C-Standard zu verstehen, der dies berücksichtigt Dereferenzierung eines nicht initialisierten Zeigers als undefiniertes Verhalten. Während frühere Verweise auf 5.3.1/1 und 3.7.3.2/4 relevante Informationen liefern, geben sie nicht explizit das undefinierte Verhalten im Zusammenhang mit der Verwendung nicht initialisierter Zeiger an.
Die Antwort liegt in Abschnitt 4.1, der sich mit der L-Wert-Konvertierung befasst zu R-Wert (Hervorhebung hinzugefügt):
"Ein L-Wert (3.10) eines Nicht-Funktions- und Nicht-Array-Typs T kann in einen R-Wert konvertiert werden. Wenn T ein unvollständiger Typ ist, ist ein Programm, das diese Konvertierung erfordert, falsch Objekt vom Typ T und kein Objekt eines von T abgeleiteten Typs ist, oder wenn das Objekt nicht initialisiert ist, ein Programm, das diese Konvertierung erfordert hat undefiniertes Verhalten."
In diesem Abschnitt heißt es eindeutig, dass der Versuch, einen L-Wert (z. B. einen Zeiger) zu verwenden, der auf ein nicht initialisiertes Objekt verweist, zu undefiniertem Verhalten führt. Daher zeigt das bereitgestellte Codebeispiel:
int* ptr; *ptr = 0;
tatsächlich undefiniertes Verhalten, da der Zeiger ptr ohne Initialisierung verwendet wird.
Für dieses Thema wird im C-Standard nach „nicht initialisiert“ gesucht " werden zusätzliche Abschnitte enthüllen, die das undefinierte Verhalten im Zusammenhang mit nicht initialisierten Objekten berühren.
Das obige ist der detaillierte Inhalt vonWo im C-Standard wird die Dereferenzierung eines nicht initialisierten Zeigers als undefiniertes Verhalten definiert?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!