>백엔드 개발 >C++ >`new unsigned int`는 C에서 메모리를 0으로 초기화합니까?

`new unsigned int`는 C에서 메모리를 0으로 초기화합니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-08 13:45:12341검색

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

new 연산자는 메모리를 0으로 초기화합니다

다음 코드 조각에서:

#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;
}

예상되는 결과는 메모리가 0으로 초기화되지 않는다는 것입니다. 0이지만 출력은 다음과 같습니다.

wsk2: 0x928e008 5
wsk2: 0x928e008 0

new 연산자가 초기화 중인 것 같습니다. 메모리는 0으로 설정되지만 실제로는 그렇지 않습니다.

작동 방식:

new 연산자에는 두 가지 버전이 있습니다.

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

기본 초기화는 메모리를 초기화하지 않는 반면, 0 초기화는 메모리를 0으로 설정합니다.

다음에도 작동합니다. arrays:

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

메모리가 실제로 0으로 설정되었는지 확인하려면 알려진 메모리 조각에 새로운 배치를 사용할 수 있습니다.

#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";
}

이 코드의 출력은 다음과 같습니다.

0
0
0
0
0

이것은 new 연산자의 0 초기화 버전에 의해 메모리가 실제로 0으로 초기화되었음을 확인합니다.

위 내용은 `new unsigned int`는 C에서 메모리를 0으로 초기화합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.