Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 具有动态分配大小和预定大小的简单阵列内存分配_C++_C_Arrays_Memory Management_Dynamic Arrays - Fatal编程技术网

C++ 具有动态分配大小和预定大小的简单阵列内存分配

C++ 具有动态分配大小和预定大小的简单阵列内存分配,c++,c,arrays,memory-management,dynamic-arrays,C++,C,Arrays,Memory Management,Dynamic Arrays,我正在写一个程序,突然产生了疑问。 分配静态数组有两种方法 int main () { int a[10]; } int main() { int N; cin >> N; //assume i input N as 10 int a[N]; } 在这两种情况下,内存分配会有什么不同? 在第二种情况下,将在运行时分配?第二种情况被编译。但这是错误的。标准C/C++不允许这样做。第二种方式是不允许的。第一种方法将在堆栈上创建内存。一旦main()退出

我正在写一个程序,突然产生了疑问。 分配静态数组有两种方法

int main ()
{ 
   int a[10];
}
int main()
{
    int N;
    cin >> N;  //assume i input N as 10
    int a[N];
}
在这两种情况下,内存分配会有什么不同?
在第二种情况下,将在运行时分配?

第二种情况被编译。但这是错误的。标准C/C++不允许这样做。

第二种方式是不允许的。第一种方法将在堆栈上创建内存。一旦main()退出,它将被取消分配。如果您想要动态分配,最好的方法是使用新的:

int* = new int[N];
但这样你最终不得不删除它。如果您同意使用STL,那么只需使用std::vector:

std::vector<int> a;
std::向量a;

标准代码C++中不允许第二个版本,因为标准的C可以被认为是一个复制品,短的摘要可变长度数组是有效的C99,但不是有效的C++,但是它被C++编译器支持为一个扩展。它们是自动的。