一个简单的分段故障程序

Segmentation Fault in a simple program

本文关键字:分段 故障 程序 简单 一个      更新时间:2023-10-16

我必须提交一些c++代码给一个提供反馈的判断系统。

然而,我得到了"硬测试用例"的段错误。

如果有人能快速看一下我的代码来帮助我,那就太好了。

(第一个输入总是一个正整数)

#include <iostream>
using namespace std;
int main()
{
    long long t;
    cin >> t;
    bool table[t][t];
    long long n = t;
    int sum = 0;
    long long s;
    while(t--)
    {
        cin >> table[t][t];
        if (!table[t][t])
        {
            sum++;
        }
    }
    for(t=0;t<n;t++)
    {
        for(s=t+1;s<n;s++)
        {
            table[t][s] = 
                    (table[t][s-1] && !table[s][s]) ||
                    (!table[t][s-1] && table[s][s]);
            if(!table[t][s])
            {
                    sum++;
            }
        }
    }
    cout << sum << endl;
    return 0;
}

我没有看到任何索引超出范围的可能性,所以最可能的"硬情况"是t大到足以溢出堆栈,因为您使用非标准的c++动态数组。使用std::vector

为堆上的数组分配数据
vector<vector<bool>> table{ t, vector<bool>{ t } };
vector<vector<bool>> table( t, vector<bool>( t ) ); // if you do not have C++11 yet

如果我输入t= 2,您正在使用std::cin读取的值将是table[2][2],这是无效的索引,因此引发分割故障。t=2的最大索引为table[1][1]