uva'上的运行时错误;扫雷艇 在C++中编写了一个程序来解决UVA(10189)。
我已经编写了代码,它似乎在我的机器上正常工作。不幸的是,我的提交似乎给了我运行时错误(在这种情况下,uva没有提到错误消息或原因)。我在这里粘贴代码: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
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的原因(请参见编辑的问题)。