Können leere Arrays in C mit „new int[0]“ zugewiesen werden?
In C die Verwendung des neuen Operators zum Zuweisen Gedächtnis wird oft eingesetzt. Es stellt sich jedoch eine Frage bezüglich der Zuweisung leerer Arrays mithilfe von new int[0]. Weist dieser Code Speicher zu und was legt der Standard dazu fest?
Standardperspektive
Gemäß 5.3.4/7 des C-Standards, wenn die direkte -new-declarator-Ausdruck als Null ausgewertet wird, weist die Zuordnungsfunktion ein Array ohne Elemente zu. Nichtsdestotrotz betont 3.7.3.1/2, dass die Dereferenzierung eines Zeigers, der aus einer Anfrage mit der Größe Null resultiert, zu einem undefinierten Verhalten führt.
In der Praxis
Trotz der im Standard vorgesehenen Toleranz Beim Zuweisen leerer Arrays wird darauf hingewiesen, dass dieser Vorgang möglicherweise trotzdem fehlschlägt. Folglich kann man den zugewiesenen Speicher nur sicher an Array-Löschen zur Freigabe weitergeben und so jeglichen direkten Speicherzugriff vermeiden.
Besonderer Hinweis
Eine Fußnote im Standard legt nahe, dass die Das Verhalten ahmt den Ansatz von malloc() oder calloc() in C nach, wobei eine Nullanforderung einen Nicht-Null-Zeiger zurückgibt. Diese Abweichung von C gewährleistet die plattformübergreifende Interoperabilität und ermöglicht die Zuweisung leerer Arrays in C.
Das obige ist der detaillierte Inhalt vonKann „new int[0]' Speicher in C zuweisen und was sind die Auswirkungen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!