uva'上的运行时错误;扫雷艇 在C++中编写了一个程序来解决UVA(10189)。

uva'上的运行时错误;扫雷艇 在C++中编写了一个程序来解决UVA(10189)。,c++,gcc,C++,Gcc,我已经编写了代码,它似乎在我的机器上正常工作。不幸的是,我的提交似乎给了我运行时错误(在这种情况下,uva没有提到错误消息或原因)。我在这里粘贴代码: using namespace std; void nullCheck(void *ptr) { exit(0); } typedef unsigned int uint; class Field { public: vector <vector<uint> > nghBombCnt; //neigh

我已经编写了代码,它似乎在我的机器上正常工作。不幸的是,我的提交似乎给了我运行时错误(在这种情况下,uva没有提到错误消息或原因)。我在这里粘贴代码:

using namespace std;

void nullCheck(void *ptr)
{
    exit(0);
}

typedef unsigned int uint;

class Field
{
public:
    vector <vector<uint> > nghBombCnt; //neighbourBombCount
    vector <vector<bool> > isBomb;
    uint width;
    uint height;

public:
    Field(uint w, uint h)
    {
    }
    Field() { }

    ~Field()
    {
    }
};

int main(void)
{
    vector<Field> fieldList;

    do
    {
        Field curField;
        uint width, height;

        scanf("%u %u", &height, &width);
        curField.width  = width;
        curField.height = height;

        for (uint rowCtr = 0; rowCtr < curField.height; rowCtr++)
        {
            vector<bool> curBombRow;
            for (uint colCtr = 0; colCtr < curField.width; colCtr++)
            {
                char curSymb;
                scanf("%1s", &curSymb);
                switch (curSymb)
                {
                    case '.':
                        curBombRow.push_back(false);  break;
                    case '*':
                        curBombRow.push_back(true);   break;
                    default:                  break;
                }
            }
            curField.isBomb.push_back(curBombRow);
        }

        if (!(curField.width == 0 && curField.height == 0))
            fieldList.push_back(curField);
        else
            break;

    } while (1);

    for (uint fieldCtr = 0; fieldCtr < fieldList.size(); fieldCtr++)
    {
        Field curField = fieldList.at(fieldCtr);
        for (uint rowCtr = 0; rowCtr < curField.height; rowCtr++)
        {
            vector<uint> curRow;
            for (uint colCtr = 0; colCtr < curField.width; colCtr++)
            {
                uint bombCnt = 0;
                if (curField.isBomb[rowCtr][colCtr])
                {
                    curRow.push_back(0);
                    continue;
                }

                if (colCtr != 0 && curField.isBomb[rowCtr][colCtr - 1])
                    bombCnt++; //east

                if (rowCtr != 0 && curField.isBomb[rowCtr - 1][colCtr])
                    bombCnt++; //north

                if (rowCtr != curField.height - 1
                        && curField.isBomb[rowCtr + 1][colCtr])
                    bombCnt++; //south

                if (colCtr != curField.width - 1
                        && curField.isBomb[rowCtr][colCtr + 1])
                    bombCnt++; //west

                if (colCtr != curField.width - 1 && rowCtr != 0
                        && curField.isBomb[rowCtr -1][colCtr + 1])
                    bombCnt++; //north-east

                if (colCtr != 0 && rowCtr != curField.height - 1
                        && curField.isBomb[rowCtr + 1][colCtr - 1])
                    bombCnt++; // south-west

                if (colCtr != curField.width - 1
                        && rowCtr != curField.height - 1
                        && curField.isBomb[rowCtr + 1][colCtr + 1])
                     bombCnt++; //south-east

                if (colCtr != 0 && rowCtr != 0
                        && curField.isBomb[rowCtr - 1][colCtr - 1])
                     bombCnt++; //north-west

                curRow.push_back(bombCnt);
            }
            curField.nghBombCnt.push_back(curRow);
        }
        fieldList[fieldCtr] = curField;
    }

    for (uint fieldNo = 0; fieldNo < fieldList.size(); fieldNo++)
    {
        printf("Field #%u:\n", fieldNo + 1);
        Field curField = fieldList.at(fieldNo);

        for (uint rowCtr = 0; rowCtr < curField.height; rowCtr++)
        {
            for (uint colCtr = 0; colCtr < curField.width; colCtr++)
            {
                if (curField.isBomb[rowCtr][colCtr])
                    printf("*");
                else
                    printf("%u", curField.nghBombCnt[rowCtr][colCtr]);
            }
            printf("\n");
        }
        printf("\n");
    }

    return 0;
}
使用名称空间std;
无效空检查(无效*ptr)
{
出口(0);
}
typedef无符号整数单元;
类字段
{
公众:
向量nghBombCnt;//邻域ombCount
矢量炸弹;
单位宽度;
单位高度;
公众:
字段(uint w,uint h)
{
}
字段(){}
~Field()
{
}
};
内部主(空)
{
向量字段表;
做
{
字段curField;
单元宽度、高度;
扫描频率(“%u%u”、&高度和宽度);
curField.width=宽度;
curField.height=高度;
对于(uint rowCtr=0;rowCtr
您是否尝试过使用Valgrind来确定是否存在内存踩踏错误?是的,在您提到这一点后,我尝试过。似乎没有内存错误。您应该添加指向实际问题的链接。不是每个人都知道UVA是什么。我一开始确实是这么做的。然而,现在uva的网站似乎已经完成了。这就是我现在将问题移到pastebin的原因(请参见编辑的问题)。