2011-03-15 103 views
-1

我在循环中调用SDL_LoadBMP(“duck.bmp”)一万次。SDL_LoadBMP间歇性失败

经过约千分之一的时间,呼叫失败和SDL_GetError()报道:

“无法打开duck.bmp”

我想不通这是为什么 - 有什么我可以做得到更多的信息?

这听起来像也许它可能是一个内存问题,但是当发生这种情况时有大量系统RAM空闲。

注意:BMP是32x32。

+0

操作系统?如果win32/64,你有一个病毒扫描器的“访问”式扫描运行? – genpfault 2011-03-15 16:26:18

回答

2

即使您有足够的免费系统RAM,仍然可能会用尽地址空间;您通常只能在32位应用程序中使用2GB。虽然图像很小,但它应该花费1000倍以上的时间来消耗那么多的内存。你在循环中做了什么其他的记忆饥饿?

最重要的是,是否有一个原因,你想重新加载图像文件10,000次?如果您正在寻找要操作的图像的多个副本,我建议使用SDL_ConvertSurface制作原始表面的副本,而不是每次都返回到该文件。如果这个方法失败了,那么SDL_GetError有可能会给你一个更有意义的错误信息。

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

0

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

As Raptor007指出,加载一个图像1000次,是啊,不建议。我认为你正在这样做,看看是否有内存泄漏。如果没有...停止这样做。一次就够了。