C++ 动态和静态内存分配?

C++ 动态和静态内存分配?,c++,memory-management,variable-length-array,C++,Memory Management,Variable Length Array,代码不能编译,因为程序将尝试为堆栈上的数组分配未知内存,但它可以编译! 我知道动态内存是什么,我读了很多关于它的书,但我不明白,为什么上面的程序会运行?!难道不是这样吗 int x; cin>>x; int arr[x]; 有人能给我举个例子,其中不适用于静态分配,而只适用于动态分配吗?一些编译器可能会启用对从堆栈分配的数组使用动态大小。但是,不是标准C++。 < p>一些编译器可以使用从堆栈分配的数组使用动态大小。虽然不是标准C++,但是你使用哪个编译器?可变

代码不能编译,因为程序将尝试为堆栈上的数组分配未知内存,但它可以编译! 我知道动态内存是什么,我读了很多关于它的书,但我不明白,为什么上面的程序会运行?!难道不是这样吗

  int x;
    cin>>x;
    int arr[x];

有人能给我举个例子,其中不适用于静态分配,而只适用于动态分配吗?

一些编译器可能会启用对从堆栈分配的数组使用动态大小。但是,不是标准C++。

< p>一些编译器可以使用从堆栈分配的数组使用动态大小。虽然不是标准C++,但是

你使用哪个编译器?可变长度数组是。这不是一个完全相同的答案,但是答案会非常相似。为什么在现代语言中,如C++和java是可以的?我不认为它在编译器中。它会编译,因为语法是正确的。这就是声明数组的方式,但是要分配内存,可以使用“NEW”或malloc。你能试着在数组中添加元素吗!!!如果这是可能的,那么我不明白,我们首先需要动态内存分配吗。这也是一种动态内存分配(唯一不同的是,内存将从堆栈中分配)。有人能告诉我这个困惑吗?感谢您使用的是哪种编译器?可变长度数组是。这不是一个完全相同的答案,但是答案会非常相似。为什么在现代语言中,如C++和java是可以的?我不认为它在编译器中。它会编译,因为语法是正确的。这就是声明数组的方式,但是要分配内存,可以使用“NEW”或malloc。你能试着在数组中添加元素吗!!!如果这是可能的,那么我不明白,我们首先需要动态内存分配吗。这也是一种动态内存分配(唯一不同的是,内存将从堆栈中分配)。有人能告诉我这个困惑吗?谢谢,我不认为它在编译器中。你能提供一些参考资料来澄清这一点吗?谢谢,这对我也有很大帮助。我没有参考资料,但你可以在谷歌上搜索“C++可变长度数组”。您可以使用
alloca()
从堆栈分配VLA。+1这是正确的。。。Dev-C++使用默认情况下提供此扩展的GCC。看<代码>-pedantic将禁止此扩展和许多其他扩展。我认为它不在编译器中。你能提供一些参考资料来澄清这一点吗?谢谢,这对我也有很大帮助。我没有参考资料,但你可以在谷歌上搜索“C++可变长度数组”。您可以使用
alloca()
从堆栈分配VLA。+1这是正确的。。。Dev-C++使用默认情况下提供此扩展的GCC。看<代码>-pedantic将禁止此扩展和许多其他扩展。
int x;
cin>>x;
int *arr=new arr[x];