创建动态 C++ 数组时出错

error creating a dynamic c++ array

本文关键字:出错 数组 C++ 动态 创建      更新时间:2023-10-16

我试图以这种形式制作一个动态数组:

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

我在 Linux 上的 g++ (gcc) 编译器拒绝创建没有固定大小的数组。但是在 dev-cpp 上的 windows 上使用相同的代码,它被编译并执行,它还允许我创建和使用动态数组,我认为这是一个编译器错误,但是当我重新启动并返回到 g++ 时,它编译并执行了代码,尽管它在我尝试在 windows 上代码之前拒绝这样做, 这怎么可能,危险吗?

C++要求在编译时知道自动存储数组的大小,否则必须动态分配数组(除非使用编译器扩展)。

你应该使用

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

vector<int> ar;

正如其他回答者指出的那样,如果您在编译时不知道数组的大小,那么您应该使用 new 动态分配。 但是(有些可耻地)他们没有告诉您您将负责通过删除来释放此内存:详细信息在这里

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