分段 填充数组时出错



这可能是很容易解决的问题。我不知道我做错了什么,请帮助这个超级简单的代码。

#include <iostream>
using namespace std;
int main()
{
    int arraysize, i, a[arraysize], n, j;
    cout << "array size";
        cin >> arraysize;
    for(int i=0, j = arraysize; i < arraysize, j > 0; i++, j--){
        a[i] = j;
        cout << "a[" << i << "] = " << a[i] << endl;
    }
}

执行这个程序时,它会输出数组的 5 个值,然后我得到一个分段错误。我不知道如何解决这个问题和/或如何正确执行此类问题。任何帮助不胜感激,谢谢。

构造aarraysize没有指定的值,这意味着您在指定a的大小时调用了未定义的行为。

此代码的非未定义行为版本如下:

#include <iostream>
//Don't use "using namespace std;"!
//using namespace std;
int main()
{
    //removed unused/unnecessary variables
    int arraysize;
    std::cout << "array size";
        std::cin >> arraysize;
    int a[arraysize];
    for(int i = 0; i < arraysize; i++) {
        int j = arraysize - i;
        a[i] = j;
        std::cout << "a[" << i << "] = " << a[i] << std::endl;
    }
}

然而。像这样在运行时指定数组大小是对该语言的非标准扩展,可能不适用于所有环境。如果希望此代码符合标准,则需要使用 std::vector

#include <iostream>
#include <vector>
int main()
{
    int arraysize;
    std::cout << "array size";
        std::cin >> arraysize;
    std::vector<int> a(arraysize);
    for(int i = 0; i < arraysize; i++) {
        int j = arraysize - i;
        a[i] = j;
        std::cout << "a[" << i << "] = " << a[i] << std::endl;
    }
}

出于这些原因,我已经从您的代码中删除了using namespace std;的使用。

显然是未定义的行为。
首先C++标准不支持可变长度数组。这是一些编译器(如 gcc(的扩展。

其次,当您实例化数组时,arraysize的值是未定义的,因此结果是不可预测的,在某些情况下可能会起作用,但这纯粹是基于运气。

如果您需要动态大小数组,最好使用 std::vector .

#include <iostream>
using namespace std;
int main()
{
    int arraysize, i, n, j;
    std::vector<int> a;
    cout << "array size";
    cin >> arraysize;
    std::vector<int> a(arraysize);
    for(int i=0, j = arraysize; i < arraysize, j > 0; i++, j--){
        a[i] = j;
        cout << "a[" << i << "] = " << a[i] << endl;
    }
    return 0;
}

相关内容

  • 没有找到相关文章