ifstream失败位设置不确定为什么

时间:2012-03-26 23:35:45

标签: c++ ifstream

也许看到这个问题会对你有所帮助:

https://ws.onehub.com/files/nzvrbj4s

屏幕截图: https://ws.onehub.com/files/9rw3li12 https://ws.onehub.com/files/37ggbfio

这是演示exe文件。

WASD移动玩家 老鼠瞄准 鼠标左键点击开火 R到Reload M创造一个怪物(我在游戏中有一个生成点,在生成点上最多喷出5个怪物3)

我正在从包含以下内容的文件中加载怪物数据:

Spider_Walk/

12

Spider_Attack/

1

Spider_Die/

9

3

17 32 5  2

28 32 8  1

48 32 15 1

12 Spider_Attack/ 1 Spider_Die/ 9 3 17 32 5 2 28 32 8 1 48 32 15 1

每次我为动画的命中区域和文件路径的数据生成蜘蛛时都会检查文件。由于资源管理器类阻止多个动画被双重加载,因此我不会每次都重新加载动画。目前我可以产生许多怪物,但是然后突然出现ifstream设置了我的失败位并且崩溃了。我试图理解为什么我的失败位被设置。

我的输出是:

(1)LOAD FILE IS BAD! FLAGS SET

EOF: 0
BAD: 0
FAIL: 1
FILENAME.c_str(): gfx/Spider/Spider.txt

我正在考虑创建一个怪物信息类并将其放入资源管理器中以仅加载一次怪物数据时,任何建议都会有所帮助。我只是担心这种失败是冰山一角,潜伏的更大。

可能最终重现问题的最小代码块。

EOF: 0 BAD: 0 FAIL: 1 FILENAME.c_str(): gfx/Spider/Spider.txt

完整的构造函数代码如下:

ifstream load_file;

load_file.open(filename.c_str());

if(!load_file.good())allegro_message("(1) LOAD FILE IS BAD! FLAGS SET\n EOF: %i \n BAD: %i \n FAIL: %i \n FILENAME.c_str(): %s", load_file.eof(), load_file.bad(), load_file.fail(), filename.c_str());

Monster::Monster(string filename,Resource_Manager *nrm)

1 个答案:

答案 0 :(得分:0)

它在开放时失败了。当你说spawn时,我假设你的意思是不同的线程,而不是新的进程。我怀疑你的文件描述符用完了,因为给定进程可能有的打开文件数量有限。

当打开失败时,它会设置全局值ERRNO。您可以使用它获得C ++的喜好(使用strerror(errno)),或者只使用perror()来查看是否存在问题。