繁体   English   中英

简单程序中的分段错误

[英]Segmentation Fault in a simple program

我必须向提供反馈的判断系统提交一些 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]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM