SDL_LoadBMP间歇性失败

时间:2011-03-15 15:25:00

标签: sdl

我在一个循环中调用SDL_LoadBMP(“duck.bmp”)一万次。

大约第一千次之后,调用失败并且SDL_GetError()报告:

“无法打开duck.bmp”

我无法弄清楚为什么会这样 - 我能做些什么来获取更多信息?

这听起来似乎可能是一个内存问题,但发生这种情况时会有大量的系统RAM空闲。

注意:BMP是32x32。

2 个答案:

答案 0 :(得分:2)

即使您有足够的可用系统RAM,仍然可能会耗尽地址空间;通常,在32位应用程序中只能使用2GB。虽然图像很小,但是用掉那么多记忆应该花费1000多次。你在循环中做了什么其他需要记忆的东西吗?

最重要的是,您是否有理由要重新加载图像文件10,000次?如果您正在寻找要操作的图像的多个副本,我建议使用SDL_ConvertSurface制作原始曲面的副本,而不是每次都返回到文件。如果此方法也失败,则SDL_GetError可能会在出现错误消息时提供更有意义的错误消息。

如果您还要将数据写回该文件,请确保正确关闭它,否则您可能会遇到权限问题。我很确定Windows不会允许你打开一个已经开放写入的文件。 (这似乎不太可能,因为你只是在循环一千次迭代之后才遇到问题,但是值得检查。)

答案 1 :(得分:1)

完成图片后,您应该调用SDL_FreeSurface(请参阅http://wiki.libsdl.org/SDL_FreeSurface)。否则,内存不会被释放。

正如Raptor007指出的那样,加载1000次图像是不行的,不推荐。我以为你这样做是为了看看是否有内存泄漏。如果不是......停止这样做。一次就够了。