我在一个循环中调用SDL_LoadBMP(“duck.bmp”)一万次。
大约第一千次之后,调用失败并且SDL_GetError()报告:
“无法打开duck.bmp”
我无法弄清楚为什么会这样 - 我能做些什么来获取更多信息?
这听起来似乎可能是一个内存问题,但发生这种情况时会有大量的系统RAM空闲。
注意:BMP是32x32。
答案 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次图像是不行的,不推荐。我以为你这样做是为了看看是否有内存泄漏。如果不是......停止这样做。一次就够了。