【发布时间】:2012-02-10 07:08:46
【问题描述】:
这让我困扰了一段时间。它触及了我(缺乏)对静态和动态内存分配之间差异的理解的核心。下面的数组是一个普通的静态数组,应该是编译时分配内存的吧?然而,我已经设置好让用户在运行时输入数组大小。
#include <iostream>
using namespace std;
int main() {
cout << "how many elements should the array hold? ";
int arraySize;
cin >> arraySize;
int arr[arraySize];
for (int i = 0; i < arraySize; ++i)
arr[i] = i * 2;
return 0;
}
请注意,此程序中没有 new 或 delete 运算符。它在 Xcode 4.2(默认 Clang 编译器)以及我学校的 UNIX 服务器(GCC 4.4.5)中运行良好。在编译时创建数组时,编译器如何知道要为arr 分配多少内存?这只是我的编译器的侥幸,可能破坏其他内存的危险代码,还是合法的?
【问题讨论】:
-
这使用了一个名为可变长度数组的功能,该功能在 C99 中首次亮相。
-
尝试用
g++ -Wall -Wextra -pedantic -std=c++98编译
标签: c++ arrays dynamic-memory-allocation dynamic-arrays