Heim > Backend-Entwicklung > C++ > Initialisiert „new' in C den Speicher auf Null?

Initialisiert „new' in C den Speicher auf Null?

Linda Hamilton
Freigeben: 2024-12-11 06:53:09
Original
646 Leute haben es durchsucht

Does `new` in C   Initialize Memory to Zero?

Operator new initialisiert Speicher auf Null

In C wird der Operator new üblicherweise für die dynamische Speicherzuweisung verwendet. Es weist einen Speicherblock der angegebenen Größe zu und gibt einen Zeiger auf den zugewiesenen Speicher zurück. Es gibt jedoch ein weit verbreitetes Missverständnis, dass new den zugewiesenen Speicher nicht mit Nullen initialisiert. In diesem Artikel wird erläutert, wie new den Speicher initialisiert, und die offensichtlichen Diskrepanzen behoben.

Standard- und Nullinitialisierung

Bei Verwendung von new zum Erstellen eines Objekts eines primitiven Typs (z. B. int , unsigned int), gibt es zwei Varianten:

  • wsk = new unsigned int; - Standardinitialisierung: Es wird keine Initialisierung durchgeführt und der Speicher bleibt nicht initialisiert.
  • wsk = new unsigned int(); - Nullinitialisierung: Der Speicher wird auf Null gesetzt.

Gleiches gilt für Arrays:

  • wsa = new unsigned int[5]; - Standardinitialisierung
  • wsa = new unsigned int[5](); - Nullinitialisierung

Klarstellung der Nullinitialisierung

Während „new“ im Allgemeinen Grundelemente mit unbestimmten Werten initialisiert, tritt die Ausnahme auf, wenn die Nullinitialisierung mit der Syntax für leere Klammern verwendet wird (neu). Typ();). Dadurch wird der Speicher mit Nullen initialisiert. Der C 11-Standard unterstützt dieses Verhalten:

[C++11: 5.3.4/15]: A new-expression that creates an object of type T initializes that object as follows: [...] If the new-initializer is interpreted according to the initialization rules of 8.5 for direct-initialization.
Nach dem Login kopieren

Placement New

Placement New ermöglicht die Zuweisung von Speicher an einem bestimmten Ort. Bei Verwendung dieser Technik mit Nullinitialisierung wird deutlich, dass der Speicher tatsächlich auf Null gesetzt ist:

//... (memory allocation and initialization code)
wsa[0] = 1;  // Modify the memory location
wsa[1] = 2;  // Modify the memory location
// ... (more modifications)
//...
Nach dem Login kopieren

Wenn der Speicher die ursprünglichen Werte (1, 2, ...) enthalten hätte, wäre die Nullinitialisierung erfolgt fehlgeschlagen. Die Ausgabe bestätigt jedoch, dass der zugewiesene Speicher auf Null gesetzt wurde.

Während „new“ den primitiven Speicher normalerweise nicht mit Nullen initialisiert, wird der Speicher durch die Nullinitialisierung (new type();) auf Null initialisiert. Dies gilt sowohl für die direkte Speicherzuweisung als auch für die Neuplatzierung.

Das obige ist der detaillierte Inhalt vonInitialisiert „new' in C den Speicher auf Null?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage