填充数组时出现分段错误[关闭]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了填充数组时出现分段错误[关闭]相关的知识,希望对你有一定的参考价值。

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

#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个数组值,然后我得到一个分段错误。我不知道如何解决这个和或如何正确执行此类问题。感谢任何帮助,谢谢。

答案

构造arraysize时,a没有指定值,这意味着在指定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;中删除了for these reasons的使用。

另一答案

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

其次,当你实例化一个数组时,arraysize的值是未定义的,所以结果是不可预测的,它可能在某些情况下有效,但这是基于纯粹的运气。

如果你需要动态大小的数组,最好使用qazxsw poi。

std::vector

以上是关于填充数组时出现分段错误[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

处理二维数组时出现分段错误[关闭]

访问填充了从管道读取的数据的结构时出现分段错误

为啥在编译我的代码C(linux)时出现分段错误(核心转储)[关闭]

为啥在访问二级指针时出现分段错误错误? C语言

返回指针时出现分段错误[关闭]

删除模板数组时出现分段错误[重复]