2014-03-04 93 views
-1

我试图使动态数组以这种形式:错误创建动态C++阵列

int x; 
cin>>x; 
int ar[x]; 

我克++(GCC)上++编译拒绝无固定尺寸来创建阵列。然而,在dev-cpp的windows上使用相同的代码,它被编译和执行,它也允许我创建和使用动态数组,我认为这是一个编译器错误,但是当我重新启动并返回到g ++时,它编译并执行代码尽管它在我尝试Windows上的代码之前拒绝这样做,那怎么会是危险的呢?

+1

你没有做你说的你没有。像你一样,G ++对动态大小的数组非常满意。发布出错信息的确切代码以及错误信息 – pm100

回答

1

C++要求在编译时知道自动存储阵列的大小,否则该阵列必须动态分配(除非使用compiler extension)。

您应该使用

int *ar = new int[x]; 
... 
delete []ar; // free the memory after use 

vector<int> ar; 
+1

对于'new'方法 - 不要忘记在最后删除你的记忆:)。 – kolenda

+0

@kolenda已被添加到答案。谢谢。 – herohuyongtao

0

至于其他应答者指出,如果你不知道在编译时数组的大小,那么你应该动态地分配使用新。但(somehwat可耻)他们不告诉你,你将负责与删除重新分配这个内存:details here

这种责任(确保你总是释放已分配的内存)中的问题,用C的最大来源++。像RAII这样的技术可以简化这个过程(简单地说就是:将内存包装在一个对象中,在构造函数中新建并在析构函数中删除,然后语言确保始终调用析构函数)

+0

我需要说清楚一点,我其实知道的方式: int x; cin >> x; int ar [x]; 实际上是一个错误的方式来做到这一点,这里的问题是发生了一些奇迹,我的GCC拒绝编译这个代码,由于数组的大小不固定,后来我重新启动我的机器后GCC现在编译这个非常相同的代码没有错误,多数民众赞成我想知道,它如何编译相同的代码,它拒绝编译前重新启动??? !!!!!! – user3043400

+0

它是defintely前后相同版本的GCC?使用相同的命令行? –

+0

是的,它是相同的GCC版本,相同的机器和相同的Linux发行版,我只是重新启动没有更多,这就是为什么我说“魔术”! – user3043400