Speicherzuweisung mit C new[0]
In C ermöglicht der Operator new[] die Zuweisung von dynamischem Speicher. Was passiert jedoch, wenn die im Operatoraufruf angegebene Array-Größe Null ist? Eine einfache Testprogrammausgabe legt nahe, dass Speicher zugewiesen zu sein scheint.
Standarddefinition
Gemäß dem C-Standard in 5.3.4/7:
"Wenn der Wert des Ausdrucks in einem Direct-New-Declarator Null ist, wird die Zuordnungsfunktion aufgerufen, um ein Array mit Nr. zuzuweisen Elemente.“
Undefiniertes Verhalten
Es ist jedoch wichtig zu beachten, dass 3.7.3.1/2 Folgendes besagt:
„Die Auswirkung der Dereferenzierung von a Der als Anforderung für die Größe Null zurückgegebene Zeiger ist undefiniert.“
Dies bedeutet, dass dies zwar technisch möglich ist Wenn Sie mit new[] ein leeres Array zuweisen, führt der Zugriff auf oder die Änderung des Speichers, auf den es verweist, zu undefiniertem Verhalten.
Zuweisungsfehler
Darüber hinaus erwähnt der Standard dies sogar für Null Bei Größenwünschen kann die Belegung noch erfolgen scheitern.
Auswirkungen
In der Praxis bedeutet dies:
Fußnote
Der Standard enthält eine Fußnote, die darauf hinweist, dass die Absicht darin besteht, die Implementierung von new[] mithilfe von Funktionen wie malloc zu ermöglichen () oder calloc(), die auch Nicht-Null-Zeiger für Anfragen der Größe Null zurückgeben.
Das obige ist der detaillierte Inhalt vonWas passiert, wenn Sie „new[]' mit der Größe Null in C verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!