“int * a = new int”和“int * a = new int [5]&#34 ;?有什么区别?

时间:2015-01-31 05:51:37

标签: 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;

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

1 个答案:

答案 0 :(得分:5)

你需要五个整数。当然你应该使用

int *a=new int[5];

由于您正在学习C ++,因此了解Undefined Behavior是明智的。

如果您正在做一些您不应该做的事情,例如将int视为int[5],您可能会期望C ++阻止您或警告您。

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