C++ C++;局部变量的动态内存分配

C++ C++;局部变量的动态内存分配,c++,memory,dynamic,allocation,C++,Memory,Dynamic,Allocation,我在学校上了一堂计算机科学课,我们的老师正在谈论动态内存分配以及为什么 cin>>size; int array[size]; // According to him this should result in a compiler error 这个不应该起作用,我们应该使用: int *p, size; cin>>size; p = new int[size] ... delete[] p; 我的问题是,如果不能像那样动态声明数组,为什么第一个示例可以工作 更新:所

我在学校上了一堂计算机科学课,我们的老师正在谈论动态内存分配以及为什么

cin>>size;
int array[size]; // According to him this should result in a compiler error
这个不应该起作用,我们应该使用:

int *p, size;
cin>>size;
p = new int[size]
...
delete[] p;
我的问题是,如果不能像那样动态声明数组,为什么第一个示例可以工作


更新:所有测试都在GNU GCC编译器中进行,上面的代码在主函数中

您使用的是支持可变长度数组的非标准编译器。你的教授是对的,
int数组[size]
不应该编译


你的教授也错误地告诉你使用
p=newint[size]
。他应该做的是告诉你使用
std::vector p(size)
。(好的,出于教育目的,这是可以的):)

这个。我发誓,这些天来,人们对使用的知识教得太多了。
g++-pedantic-Wall file.cpp
受到强烈鼓励@不是。即使它编译并运行,声明一个动态大小的数组也不是一个好的标准。使用<代码> new < /C>比较好,但是对于动态数组,STD::vector类是任何体面的C++程序员推荐的。“代码> P= new int [Stsie] < /Cord>没有任何错误,它只是一个简单的动态数组。code>std::vector是更强大的数据结构,但它更强大advanced@Itehnological不,没有。编译器可以有扩展,但语言禁止VLA。添加标志
-pedantic-ansi
,以确保编译器没有使用扩展。您可能还应该添加
-Werror-Wall-Wextra