我试图以这种形式制作动态数组:
int x;
cin>>x;
int ar[x];
Linux上的我的g ++(gcc)编译器拒绝创建没有固定大小的数组。但是在dev-cpp上的windows上使用相同的代码,它被编译并执行,它也允许我创建和使用动态数组,我认为这是一个编译器错误,但是当我重新启动并返回到g ++时它编译并执行代码虽然在我尝试Windows上的代码之前拒绝这样做,但这怎么可能并且危险吗?
答案 0 :(得分:1)
C++
要求在编译时知道自动存储阵列的大小,否则必须动态分配数组(除非使用compiler extension)。
你应该使用
int *ar = new int[x];
...
delete []ar; // free the memory after use
或
vector<int> ar;
答案 1 :(得分:0)
正如其他回答者指出的那样,如果你在编译时不知道数组的大小,那么你应该使用new动态分配。但是(某些人可耻地)他们没有告诉你,你将负责用删除来释放这个记忆:details here
这个责任(确保你总是释放你已经分配的内存)是C ++中最大的问题来源。像RAII这样的技术可以使这更容易(简单地说:将内存包装在一个对象中,构造函数中的new,并在析构函数中删除,然后语言确保总是调用析构函数)