我正在测试一个游戏机制,其中有两个文件(一个名为' X.txt'另一个' Y.txt')跟踪你的X和Y位置。它的工作方式是每次调用播放器的更新(即移动)时,程序会将坐标写入X和Y文件。当您关闭程序并重新打开该文件时,您将从上次关闭程序时所处的X和Y坐标开始。我有两个问题:
1)每次运行程序时,我都会从默认坐标(0,0)开始,即使我告诉程序从文件中读取数据。
2)当我关闭程序时,我收到一条错误说:
' FNTSTWE.exe中0x576812A7(msvcp120d.dll)的未处理异常:0xC0000005:访问冲突读取位置0xFEEEFEEE。'
错误是可变的,它们总是完全不同,这只是我得到的许多错误之一。
此外,有时它会引导我使用不同的文件,例如&x; xlocale'或者' output.c'。
我认为这两件事是相互联系的,如果我能解决这些问题,我可以让他们两个都工作。
以下是代码:https://www.dropbox.com/s/j56kb41q3bmmnby/Program_SDL2_IO_Error.zip?dl=0
只需查看代码,请告诉我我做错了什么。
为了重新创建我正在讨论的错误,使用这些文件创建一个Visual Studio SDL2项目并调试它以查看我的意思。
请帮助。
谢谢。
答案 0 :(得分:1)
CReadWriter
类'函数中,您将参数作为值传递,因此不会更改curX的值,并且CPlayer::CPlayer
中的curY(它们保持为0)。CPlayer::~CPlayer
(析构函数)中,您将Image_Surface
设置为NULL
,然后尝试使用SDL_FreeSurface
释放它,从而导致内存错误。<强>解决方案:强>
您的阅读方法必须类似于:
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
。