错误动态数组

Posted

技术标签:

【中文标题】错误动态数组【英文标题】:Error dynamic array 【发布时间】:2014-07-24 06:12:20 【问题描述】:

在堆栈中创建不会产生任何错误 在堆中动态创建会产生错误。

   int a;
   cin>>a;
   int B[a];  // OK
   int A[] = new int[a]; // error: variable-sized object 'A' may not be initialized

为什么第二个会导致错误?

【问题讨论】:

int B[a]; 也不是合法的 C++。这是一个编译器扩展。 @T.C.第一个没有错误 int * A = new int[a]; 应该没问题。 @songyuanyao 我知道,但是为什么不在STACK? 因为new返回一个指针。 【参考方案1】:

B[a] 是非法的。数组大小需要在编译时知道。 'A' 的类型应该是 int* 而不是 int[]。

int* A=new int[a];

【讨论】:

什么?诠释一个;辛>>一个;诠释 B[a]; // OK B[1] = 45; cout @AAAser 这是非法的。 这是一个编译器扩展。但重点是new返回一个指针。 @AAAser 我意识到 C++ 就是那样令人困惑,因为函数参数列表中的int[] 实际上是一个指针。但在这种情况下它不是。

以上是关于错误动态数组的主要内容,如果未能解决你的问题,请参考以下文章

动态二维数组。为啥是分段错误?

使用动态数组的 C++ 逻辑错误

C++ 动态数组每次添加都会将大小增加 1 - 错误

在字符串和结构数组中查找动态内存分配错误

为啥大型静态数组会产生段错误而动态却不会? (C++)

访问导致运行时错误的动态数组