SDL2/ c++文件输入输出错误
SDL2/C++ File I/O Error
我正在测试一个游戏机制,其中将有两个文件(一个名为'X.txt',另一个名为'Y.txt')记录你的X和Y位置。它的工作方式是,每次玩家的更新(例如移动)被调用时,程序将把坐标写入X和Y文件。当您关闭程序并重新打开该文件时,您将从上次关闭程序时所处的X和Y坐标开始。我有两个问题
1)每次我运行程序时,我都从默认坐标(0,0)开始,即使我告诉程序从文件中读取。
2)当我关闭程序时,我得到一个错误说:' FNTSTWE.exe中0x576812A7 (msvcp120 .dll)的未处理异常:0xC0000005:访问违规读取位置0xFEEEFEEE.'
顺便说一下,错误是可变的,它们总是非常不同,这只是我得到的许多错误之一。
而且,有时它会引导我到不同的文件,如'xlocale'或'output.c'。
我认为这两件事是有联系的,如果我能解决它们,我就能让它们都发挥作用。
下面是代码:https://www.dropbox.com/s/j56kb41q3bmmnby/Program_SDL2_IO_Error.zip?dl=0看看代码,告诉我哪里做错了。
为了重新创建我所说的错误,使用这些文件创建一个Visual Studio SDL2项目并调试它,看看我的意思。
请帮助。
谢谢。
- 在你的
CReadWriter
类的函数中,你将参数作为值传递,因此不改变CPlayer::CPlayer
中的curX和curY的值(它们保持0)。 - 在
CPlayer::~CPlayer
(析构器)中,您将Image_Surface
设置为NULL
,然后尝试使用SDL_FreeSurface
释放它,导致内存错误。
解决方案:
- 请参阅这篇文章,了解不同参数传递方式之间的区别:按引用传递与按值传递的区别是什么?
你的read方法必须是这样的:
void ReadX(int* X); // pass a pointer to the variable, in which you want to store the read value
void ReadX(int& X); // pass a reference to the variable ....
- 改变析构函数中两个语句的顺序:先释放图像表面,然后将变量设置为
NULL
。
相关文章:
- 输出错误,问题是找到总和5000位数字cpp
- 字符的输入/输出操作
- C++ 中文件输入输出中的长长 v/s int
- 要求用户输入C++输出文件名
- 使用复制构造函数的程序输出错误
- 输入 1024 后十进制到二进制转换的输出错误?
- C++输入/输出错误
- 简单的NOOB C 输入/输出问题:代码错误
- 最小的函数输入和输出错误
- 二项式系数程序输出错误的结果,如果输入是大的(C++)
- scanf() 为最后一行输入提供错误的输出
- 数据文件输入/输出错误
- 使用大输入时输出错误
- 维基百科输入/输出示例上的拼写错误
- switch语句:如果输入不是数字(1到9)或字母(a到z)输出<<“错误”?C++
- 嵌入式系统上的ALSA - readi -输入/输出错误和冻结
- 试图编译一个qt项目,在不同的地方得到输入/输出错误
- 基本输入/输出c++错误
- 输入不是数字时的输出错误。C++
- SDL2/ c++文件输入输出错误