Heim >Backend-Entwicklung >C++ >Kann C „new int[0]' leeren Speicher zuweisen, und wenn ja, welche Auswirkungen hat das?

Kann C „new int[0]' leeren Speicher zuweisen, und wenn ja, welche Auswirkungen hat das?

Barbara Streisand
Barbara StreisandOriginal
2024-12-26 13:07:10224Durchsuche

Can C   `new int[0]` Allocate Empty Memory, and If So, What Are the Implications?

Curiosity Corner: Zuweisen von leerem Speicher in C

Im Bereich der C-Programmierung stellt sich eine interessante Frage: Können wir Speicher für eine zuweisen? leerer Block, dargestellt durch new int[0].

Beobachtungen aus einem Test Anwendung

Eine einfache Testanwendung, die das Ergebnis von new int[0] ausgibt, zeigt eine Ausgabe von 0x876c0b8 an, was darauf hindeutet, dass tatsächlich Speicher zugewiesen wird.

Eintauchen in die Standard

Der C-Standard gibt hierzu Orientierung matter:

  • Nullgroße Arrays: 5.3.4/7 besagt, dass ein direkter Neudeklarator mit einem Ausdruckswert von Null zu einer Zuweisung für ein Array mit Nr. führt Elemente.
  • Undefinierte Dereferenzierung: 3.7.3.1/2 warnt davor Die Dereferenzierung eines Zeigers, der für eine Anfrage mit der Größe Null zurückgegeben wird, hat ein undefiniertes Verhalten.

Zusätzliche Überlegungen

  • Selbst bei einer Anfrage mit der Größe Null ist die Zuordnung kann fehlschlagen.
  • Obwohl die Zuweisung zulässig ist, ist die Dereferenzierung des zurückgegebenen Speichers rechtlich nicht genau definiert Plattformen.
  • Sie sollten den zugewiesenen Speicher löschen, auch wenn er die Größe Null hat.

Foot-Note Insights

Ein interessanter Fuß -Hinweis aus 3.7.3.1/2 zeigt, dass die Absicht darin besteht, die Implementierung des Operators new() entweder mit malloc() oder calloc() zu ermöglichen, die sich in Bezug auf ähnlich verhalten Anfragen mit Nullgröße. C unterscheidet sich jedoch von C dadurch, dass eine Anforderung der Größe Null erforderlich ist, um einen Nicht-Null-Zeiger zurückzugeben.

Das obige ist der detaillierte Inhalt vonKann C „new int[0]' leeren Speicher zuweisen, und wenn ja, welche Auswirkungen hat das?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn