请教:请帮忙看看我这个读写文件的C++程序是不是有问题?
这是一个我用Windows SDK编的贪食蛇游戏里保存和载入游戏的函数,Snake和apple都是全局变量,程序运行时点菜单的保存游戏时调用SaveGame函数,点载入游戏时调用LoadGame函数,devc++4.9.9.2编译通过.
//保存游戏,保存Snake和apple,成功返回true,失败返回false
bool SaveGame(void)
{
ofstream mysave( "save.snk ");
int i;
if(mysave.fail())
{
return false;
}
//存放蛇的长度
mysave < <iLength < <endl;
//存蛇的结构
for(i = 0; i <iLength; i++)
mysave < <Snake[i].x < < " " < <Snake[i].y < <endl;
if(mysave.bad())//如有致命错误返回false
{
return false;
}
//存果子的位置
mysave < <apple.x < < " " < <apple.y < <endl;
if(mysave.bad())//如有致命错误返回false
{
return false;
}
mysave.close();
return true;
}
//载入游戏,成功返回true,错误返回false
bool LoadGame(void)
{
ifstream myload( "save.snk ");
if(myload.fail())
{
return false;
}
int len,i;
myload> > len; //载入蛇的长度
if(myload.bad())//如有致命错误返回false
{
return false;
}
iLength = len;
for(i = 0; i <len; i++)//载入蛇的结构
myload> > Snake[i].x> > Snake[i].y;
myload> > apple.x> > apple.y; //载入果子的位置
if(myload.bad())//如有致命错误返回false
{
return false;
}
myload.close();
return true;
}
但是有个问题,游戏开始后先点保存再点载入什么问题都没有,但是如果点了保存后退出,在启动游戏后直接点载入游戏(这样我下次开机就可以接着上次的玩),就会一长串对话框,内容都一样:
“Microsoft Visual C++ Runtime Library
Runtime Error:
Program: D:\program\code\snake\SNAKE.exe
This application has requested the Runtime to terminate it in a unusual way.
Please contact the application 's support team for more information.”
换句话说,
如果文件不存在,点载入文件会进入我程序中的错误处理,没有什么异常;
如果先点保存再点载入, 程序正常;
如果点了保存,退出,再启动游戏,点载入文件, 就出现上面的错误。
这就有点奇怪,我根本就没装VC++,怎么会冒出VC++的错误?请各位帮忙看看程序是不是有什么问题?谢谢!
[解决办法]
跟踪一下,在哪出错了.
[解决办法]
存档后,
对工程进行单步执行看看问题出在哪个语句 ~~
从这个问题现象来看,
好像是对文件操作冲突了?猜测 ~~
[解决办法]
最好跟一下程序,从程序上来看,没什么问题,感觉上像是在程序运行的时候出现了资源冲突。
[解决办法]
myload> > Snake[i].x
你Snake没有预开大小。
前面加Snake.resize(len);