2011-03-15 4 views
-1

J'appelle SDL_LoadBMP ("duck.bmp") dans une boucle dix mille fois.SDL_LoadBMP échoue par intermittence

Après environ la millième fois, l'appel échoue et SDL_GetError() rapporte:

« Impossible duck.bmp ouvert »

Je ne peux pas comprendre pourquoi il en est - il n'y a rien Je peux faire pour obtenir plus d'informations?

Il semble que ce soit peut-être un problème de mémoire, mais il y a beaucoup de RAM système libre quand cela se produit.

Remarque: le BMP est 32x32.

+0

OS? Si win32/64, avez-vous un scanner de virus avec l'analyse de type «sur accès» en cours d'exécution? – genpfault

Répondre

2

Même si vous avez beaucoup de RAM libre du système, pourrait encore manquer d'espace d'adressage; En général, vous ne pouvez utiliser que 2 Go dans une application 32 bits. Bien qu'avec une image aussi petite, elle devrait prendre plus de 1000 fois plus de temps pour utiliser autant de mémoire. Fais-tu autre chose dans ta boucle?

Plus important encore, existe-t-il une raison pour laquelle vous souhaitez recharger le fichier image 10 000 fois? Si vous recherchez plusieurs copies de l'image à manipuler, je vous recommande de faire des copies de la surface d'origine avec SDL_ConvertSurface au lieu de revenir au fichier à chaque fois. Si cette méthode échoue également, il est possible que SDL_GetError vous envoie un message d'erreur plus significatif.

Si vous écrivez également des données dans ce fichier, vérifiez que vous le fermez correctement ou que vous rencontrez un problème lié aux autorisations. Je suis à peu près certain que Windows ne vous permettra pas d'ouvrir un fichier à lire qui est déjà ouvert pour l'écriture. (Cela semble moins probable puisque vous êtes seulement frapper le problème après mille itérations de la boucle, mais il vaut la peine de vérifier.)

0

Lorsque vous avez terminé avec l'image, vous devez appeler SDL_FreeSurface (voir http://wiki.libsdl.org/SDL_FreeSurface). Sinon, eh bien, la mémoire n'est pas libérée. Comme le souligne Raptor007, charger une image 1000 fois est, ahem, pas recommandé. J'ai supposé que vous faisiez ceci pour voir s'il y avait une fuite de mémoire. Si non ... arrête de le faire. Une fois est assez.

Questions connexes