首页 > 解决方案 > 使用 C++ 的 UVA Judge Online 的运行时错误(问题 10050)

问题描述

嗨,我的程序有问题,老实说,我不知道在哪里或如何解决它。这是代码

#include <iostream>
#include <cstdio>
#include <string>
#include <vector>
#include <iomanip>
#include <stdio.h>
#include <string.h>

using namespace std;

int main()
{
    bool ok;
    int testcases;
    scanf("%d", &testcases);
    vector<int> days(testcases);
    vector<int> parties(testcases);
    vector<vector<int>> hartals(2);
    for (int i = 0; i < testcases; i++)
    {
        scanf("%d", &(days[i]));
        scanf("%d", &parties[i]);
        hartals[i].resize(parties[i]);
        for (int j = 0; j < parties[i]; j++)
        {
            scanf("%d", &hartals[i][j]);
        }
    }
    
    vector<vector<int>> initialHartalsValues = hartals;
    for (int i = 0; i < testcases; i++)
    {
        int week = 0, nonWorkingDays = 0;
        for (int j = 1; j < days[i] + 1; j++)
        {
            if (j != 1 && j - 7 * (week + 1) == 1)
            {
                week++;
            }
            ok = true;
            for (int k = 0; k < hartals[i].size(); k++)
            {
                if (hartals[i][k] == j)
                {
                    hartals[i][k] = hartals[i][k] + initialHartalsValues[i][k];
                    if (ok && j - 7 * week != 6 && j - 7 * week != 7)
                    {
                        ok = false;
                        nonWorkingDays++;
                    }
                }
            }
        }
        printf("%d\n", nonWorkingDays);
    }
    return 0;
}

该程序运行良好,它完成了它的工作,但是当我将它提交给评委时,我抛出了一个运行时错误,我找不到它在哪里。

标签: c++runtime

解决方案


 vector<vector<int>> hartals(2);` 

在外部 s`中构造两个条目,vector在内部vectors` 中不构造条目。

但是我们有

for (int i = 0; i < testcases; i++)
{
    ...
    hartals[i].resize(parties[i]);

testcases可能不是 2,因此i很容易越界并调用可怕的Undefined Behavior。在您的机器上,程序表现出看似“有效”的行为。在评判系统上,你运气更好,程序崩溃。听起来很奇怪,崩溃是好运。通过崩溃,你知道你有一个错误。

vector<vector<int>> hartals(testcases);

一个测试,看看它是否有帮助。那里可能有更多错误,但这可能是您现在绊倒的错误。


推荐阅读