C++中动态分配内存的初始值

Bre*_*rge 2 c++ memory dynamic

在C++中,当你动态分配一个数组时int,ints 的值是未定义的还是初始化为0?

    int *array = new int[50];
Run Code Online (Sandbox Code Playgroud)

Luc*_*ore 7

这个词是未初始化的.但这取决于你如何初始化数组.你可以初始化它:

int *array = new int[50]();
Run Code Online (Sandbox Code Playgroud)

并且值将为0.

如果你保持未初始化状态,你就无法知道它们的值是什么,因为从中读取它们将是未定义的行为.


fre*_*low 6

如果使用向量而不是数组,则所有元素的初始值均为0:

std::vector<int> v(50);
Run Code Online (Sandbox Code Playgroud)

如果需要不同的默认值,可以指定一个:

std::vector<int> v(50, 42);
Run Code Online (Sandbox Code Playgroud)

向量的另一个好处是您不必手动释放底层数组.