"int*a = new int"和"int*a = new int [5]"之间有什么区别?

Dou*_*fer -2 c++

我知道"int*a = new int"用于分配内存以包含int类型的单个元素."int*a = new int [5]"用于分配int类型的元素的块(数组).但是当我运行此代码时

int *a=new int;
for(int i=0;i<4;i++)
   a[i]=i;
for(int i=0;i<4;i++)
   cout<<a[i]<<endl;
Run Code Online (Sandbox Code Playgroud)

它运行没有任何错误,并显示正确的输出,所以什么时候应该使用"int*a = new int [5]"?或者它们在使用方面是否相同?我在codeblocks中使用gnu c ++编译器.

Dre*_*ann 5

你想要五个整数.当然你应该使用

int *a=new int[5];
Run Code Online (Sandbox Code Playgroud)

由于您正在学习C++,因此了解未定义的行为是明智的.

你可能期望C++阻止你或警告你,如果你正在做一些你不应该做的事情,比如把它int当成一个int[5].

C++不是为追踪这些错误而设计的.如果你制作它们,C++只承诺它不会做出任何承诺.即使程序在上次运行时运行,下次也可能无法运行.