Heim >Backend-Entwicklung >C++ >Was passiert, wenn Sie „new[]' mit der Größe Null in C verwenden?

Was passiert, wenn Sie „new[]' mit der Größe Null in C verwenden?

Barbara Streisand
Barbara StreisandOriginal
2024-12-16 16:26:10563Durchsuche

What Happens When You Use `new[]` with a Size of Zero in C  ?

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:

  • Sie können leere Arrays mit new[] zuweisen.
  • Sie sollten den zurückgegebenen Zeiger nicht dereferenzieren.
  • Sie sollten den zugewiesenen Speicher löschen, auch wenn er Null hat size.

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!

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