SDL_LoadBMP间歇性故障

SDL_LoadBMP间歇性故障,sdl,Sdl,我正在循环调用SDL_LoadBMPduck.bmp一万次 大约在第千次之后,呼叫失败,SDL_GetError报告: 无法打开duck.bmp 我不明白为什么会这样-我能做些什么来获取更多信息吗 听起来可能是内存问题,但出现这种情况时,系统内存会大量释放 注意:BMP是32x32。即使您有足够的可用系统RAM,也可能耗尽地址空间;在32位应用程序中,通常只能使用2GB。虽然图像很小,但要消耗掉这么多内存,需要花费1000倍以上的时间。在你的循环中,你还做了其他需要内存的事情吗 最重要的是,是否

我正在循环调用SDL_LoadBMPduck.bmp一万次

大约在第千次之后,呼叫失败,SDL_GetError报告:

无法打开duck.bmp

我不明白为什么会这样-我能做些什么来获取更多信息吗

听起来可能是内存问题,但出现这种情况时,系统内存会大量释放


注意:BMP是32x32。

即使您有足够的可用系统RAM,也可能耗尽地址空间;在32位应用程序中,通常只能使用2GB。虽然图像很小,但要消耗掉这么多内存,需要花费1000倍以上的时间。在你的循环中,你还做了其他需要内存的事情吗

最重要的是,是否有理由要将图像文件重新加载10000次?如果要处理图像的多个副本,我建议使用创建原始曲面的副本,而不是每次都返回文件。如果此方法也失败,则SDL_GetError可能会在失败时向您提供更有意义的错误消息


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

处理完图像后,您应该调用SDL_FreeSurface查看。否则,内存不会被释放


正如Raptor007所指出的,不建议加载1000次图像。我以为你这么做是为了看看是否有内存泄漏。如果不是。。。别再做了。一次就够了。

OS?如果是win32/64,是否有运行访问类型扫描的病毒扫描程序?