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++编译器支持为一个扩展。它们是自动的。