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

Initialisiert „new unsigned int' den Speicher in C auf Null?

Barbara Streisand
Barbara StreisandOriginal
2024-12-08 13:45:12341Durchsuche

Does `new unsigned int` Initialize Memory to Zero in C  ?

Operator new initialisiert den Speicher auf Null

Im folgenden Codeausschnitt:

#include <iostream>

int main(){
  unsigned int* wsk2 = new unsigned int(5);
  std::cout << "wsk2: " << wsk2 << " " << *wsk2 << std::endl;
  delete wsk2;
  wsk2 = new unsigned int;
  std::cout << "wsk2: " << wsk2 << " " << *wsk2 << std::endl;
  return 0;
}

Das erwartete Ergebnis ist, dass der Speicher nicht auf null initialisiert wird Null, aber die Ausgabe ist:

wsk2: 0x928e008 5
wsk2: 0x928e008 0

Es scheint, dass der Operator new den Speicher auf Null initialisiert, aber Das ist es tatsächlich nicht.

Wie es funktioniert:

Es gibt zwei Versionen des Operators neu:

wsk = new unsigned int;      // default initialized (ie nothing happens)
wsk = new unsigned int();    // zero    initialized (ie set to 0)

Die Standardinitialisierung funktioniert nicht Initialisieren Sie den Speicher, während die Nullinitialisierung den Speicher auf Null setzt.

Es funktioniert auch für Arrays:

wsa = new unsigned int[5];   // default initialized (ie nothing happens)
wsa = new unsigned int[5](); // zero    initialized (ie all elements set to 0)

Um zu bestätigen, dass der Speicher tatsächlich auf Null gesetzt ist, können wir „placement new“ mit einem bekannten Teil des Speichers verwenden:

#include <new>
#include <iostream>


int main()
{
    unsigned int   wsa[5] = {1,2,3,4,5};

    // Use placement new (to use a know piece of memory).
    // In the way described above.
    // 
    unsigned int*    wsp = new (wsa) unsigned int[5]();

    std::cout << wsa[0] << "\n";   // If these are zero then it worked as described.
    std::cout << wsa[1] << "\n";   // If they contain the numbers 1 - 5 then it failed.
    std::cout << wsa[2] << "\n";
    std::cout << wsa[3] << "\n";
    std::cout << wsa[4] << "\n";
}

Die Ausgabe dieses Codes ist:

0
0
0
0
0

Was bestätigt, dass der Speicher tatsächlich durch die Null-Initialisierungsversion des Operators new auf Null gesetzt wird.

Das obige ist der detaillierte Inhalt vonInitialisiert „new unsigned int' den Speicher in C auf Null?. 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