int* arr = new int [5];
和int* arr = new int();
之间的区别是什么?
答案 0 :(得分:2)
int* arr = new int [5];
以上分配5 int
的数组而不初始化它们,并将其分配给新变量arr
。应使用delete [] arr;
释放数组。
int* arr = new int();
上面分配了一个值初始化int
,并将其分配给错误命名的新变量arr
。应使用delete arr;
释放内存。
访问越界,或试图以错误的方式释放某些东西导致Undefined Behavior,这意味着编译器和运行时都没有任何要求。
由于您的程序在此后不久结束,因此可以泄漏这些分配以避免make-work。你应该添加一个你故意这样做的评论。