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
Freigeben: 2024-12-08 13:45:12
Original
346 Leute haben es durchsucht

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;
}
Nach dem Login kopieren

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

wsk2: 0x928e008 5
wsk2: 0x928e008 0
Nach dem Login kopieren

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)
Nach dem Login kopieren

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)
Nach dem Login kopieren

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";
}
Nach dem Login kopieren

Die Ausgabe dieses Codes ist:

0
0
0
0
0
Nach dem Login kopieren

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!

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