它的编译,但为什么它告诉我"核心倾倒"跑的时候

时间:2015-03-31 04:03:33

标签: c++

我正在尝试我的代码的第一部分,我试图消除所有数字,直到输入的数字可被2整除而不使用(向量,除法或模数)

#include <iostream>
using namespace std;

int main()
{
int num;  
int array [num];
cout << "Please enter a number" << endl; 
cin >> num; 
cout << endl; 
if(num == 0)
{
    return 0;
}
int var = 2; 
int check;
for(int x = 0; x < num;x++)
{

    array[x] = var; 
    check = var; 
    while(check > 0) // This loop checks if a number is divisible by 2
    {
    check = var - 2; 
    }
    if(check == 0)
    {
        array[x] = 0; 
    }
    else
    {
    cout << array[x]; 
    }
    var++;
}
}

1 个答案:

答案 0 :(得分:2)

int array [num];

理想情况下,这应该生成一个类似于:

的编译器警告
  

ISO C ++禁止可变大小数组

请注意,代码中的上述行不一定会使您进入未定义的行为区域。您位于实施定义的区域中。 现在,为什么你的代码失败了,因为num未初始化。这是未定义的行为。因此,您的代码显示随机行为并不令人惊讶。 将数组的定义移动到输入num的点之下将起作用 虽然如果你真的想要一个可变大小的数组,希望你的代码可以跨编译器移植,那么就把它分配到堆上。

cin >> num;
int *array = new int[num]; // don't forget to delete this, or even better use unique_ptr

更好的是std :: vector然后问题对其使用施加了人为的限制。 另请将array变量重命名为其他内容。 c ++ 11有一个具有相同名称的标准容器。