IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SFML Discussion :

[SFML] Image double free or corruption


Sujet :

SFML

  1. #1
    Membre actif Avatar de Belegkarnil
    Inscrit en
    Juin 2005
    Messages
    289
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Juin 2005
    Messages : 289
    Points : 205
    Points
    205
    Par défaut [SFML] Image double free or corruption
    Bonjour, j'utilise SFML pour faire un mini jeu 2D pour apprendre un peu le C++ comme SFML est simple d'utilisation. Seulement, j'ai un problème lorsque je charge une image.
    Si je met ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    sfImage img;
    img.LoadFromFile("./sprites/chara.bmp");
    pas de problème, par contre avec ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    sfImage img;
    img.LoadFromFile("./player/1/stop/img1.bmp");
    j'ai une erreur lors de l'exécution. => Problème de lecture d'image?

    Voici l'erreur lors de l'exécution :

    *** glibc detected *** ./rpg: double free or corruption (out): 0x000000000071c7b0 ***
    ======= Backtrace: =========
    /lib/libc.so.6[0x2b53a0296b23]
    /lib/libc.so.6(cfree+0x8c)[0x2b53a029a26c]
    /usr/lib/libGL.so.1[0x2b53a15a5e5e]
    ======= Memory map: ========
    00400000-00404000 r-xp 00000000 08:06 3891882 /home/belegkarnil/Mes documents/Projets/RPG/rpg00603000-00604000 rw-p 00003000 08:06 3891882 /home/belegkarnil/Mes documents/Projets/RPG/rpg
    00604000-0074a000 rw-p 00604000 00:00 0 [heap]
    40000000-40002000 rwxp 00000000 00:0d 2644 /dev/zero
    40002000-40076000 rw-p 00000000 00:0d 2644 /dev/zero
    40076000-400ea000 rw-p 00000000 00:0d 2644 /dev/zero
    2aaaaaaab000-2aaaaab1f000 rw-p 2aaaaaaab000 00:00 0
    2aaaaab1f000-2aaaaab3d000 rw-s 00000000 00:08 0 /SYSV00000000 (deleted)
    2aaaaab3d000-2aaaaab5f000 rw-p 2aaaaab3d000 00:00 0
    2aaaaab5f000-2aaaaaf47000 rw-s d0000000 00:0d 16323 /dev/nvidia0
    2aaaaaf47000-2aaaaaf48000 rw-s ed001000 00:0d 16323 /dev/nvidia0
    2aaaaaf48000-2aaaaafb0000 rw-p 2aaaaaf48000 00:00 0
    2aaaaafb0000-2aaaab0f2000 rw-s 5116a000 00:0d 16323 /dev/nvidia0
    2aaaab0f2000-2aaaab0f3000 rw-s edc02000 00:0d 16323 /dev/nvidia0
    2aaaab0f3000-2aaaab0f4000 rw-s edc02000 00:0d 16323 /dev/nvidia0
    2aaaab0f4000-2aaaab0f5000 rw-s 5116b000 00:0d 16323 /dev/nvidia0
    2aaaab0f5000-2aaaab0f6000 rw-s 4fe75000 00:0d 16323 /dev/nvidia0
    2aaaab0f6000-2aaaab0f7000 rw-s d7b0b000 00:0d 16323 /dev/nvidia0
    2aaaab0f7000-2aaaab0fb000 rw-s 4fe76000 00:0d 16323 /dev/nvidia0
    2aaaab0fb000-2aaaab1fb000 rw-s 4fe7a000 00:0d 16323 /dev/nvidia0
    2aaaab23a000-2aaaab23b000 rw-s 00000000 00:08 16089102 /SYSV00000000 (deleted)
    2aaaab23b000-2aaaab23c000 rw-s 00000000 00:08 16121872 /SYSV00000000 (deleted)
    2aaaab23c000-2aaaab23d000 rw-s 00000000 00:08 16154641 /SYSV00000000 (deleted)
    2aaaab23d000-2aaaab27e000 rw-p 2aaaab23d000 00:00 0
    2aaaab27e000-2aaaab27f000 rw-s 00000000 00:08 16187410 /SYSV00000000 (deleted)
    2aaaab27f000-2aaaab280000 rw-s 00000000 00:08 16220179 /SYSV00000000 (deleted)
    2aaaab297000-2aaaab2a1000 r-xp 00000000 08:06 2094738 /usr/lib/libXcursor.so.1.0.2
    2aaaab2a1000-2aaaab4a0000 ---p 0000a000 08:06 2094738 /usr/lib/libXcursor.so.1.0.2
    2aaaab4a0000-2aaaab4a1000 rw-p 00009000 08:06 2094738 /usr/lib/libXcursor.so.1.0.2
    2aaaab4a1000-2aaaab4a6000 r-xp 00000000 08:06 2094746 /usr/lib/libXfixes.so.3.1.0
    2aaaab4a6000-2aaaab6a5000 ---p 00005000 08:06 2094746 /usr/lib/libXfixes.so.3.1.0
    2aaaab6a5000-2aaaab6a6000 rw-p 00004000 08:06 2094746 /usr/lib/libXfixes.so.3.1.0
    2aaaab6a6000-2aaaab6e6000 rw-s d78a0000 00:0d 16323 /dev/nvidia0
    2aaaab6e6000-2aaaab9e1000 rw-p 2aaaab6e6000 00:00 0
    2aaaaba62000-2aaaabb64000 rw-p 2aaaaba62000 00:00 0
    2aaaac000000-2aaaac021000 rw-p 2aaaac000000 00:00 0
    2aaaac021000-2aaab0000000 ---p 2aaaac021000 00:00 0
    2b539ed8a000-2b539eda6000 r-xp 00000000 08:06 609499 /lib/ld-2.5.so
    2b539eda6000-2b539eda9000 rw-p 2b539eda6000 00:00 0
    2b539efa5000-2b539efa7000 rw-p 0001b000 08:06 609499 /lib/ld-2.5.so
    2b539efa7000-2b539efc3000 r-xp 00000000 08:06 3044946 /usr/lib/libSFML_audio.so
    2b539efc3000-2b539f1c2000 ---p 0001c000 08:06 3044946 /usr/lib/libSFML_audio.so
    2b539f1c2000-2b539f1c4000 rw-p 0001b000 08:06 3044946 /usr/lib/libSFML_audio.so
    2b539f1c4000-2b539f1ce000 r-xp 00000000 08:06 605045 /usr/lib/libSFML_network.so
    2b539f1ce000-2b539f3ce000 ---p 0Abandon (core dumped)
    Merci

  2. #2
    Membre éprouvé Avatar de Jérémy Lefevre
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2004
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 898
    Points : 969
    Points
    969
    Par défaut
    Ton erreur te dit que tu appel 2fois un delete sur la meme adresse dans ta memoire! ou que ta memoire est corrompu par un debordement ou quelque chose ds le genre... ! est ce que tes images sont valides?? les chemins sont ils valides??

  3. #3
    Membre actif Avatar de Belegkarnil
    Inscrit en
    Juin 2005
    Messages
    289
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Juin 2005
    Messages : 289
    Points : 205
    Points
    205
    Par défaut
    Oui, c'était cela merci

    Un delete permet de libérer l'espace mémoire. Mais quand le programme se termine, l'espace alloué pour le programme se vide ou bien pas, il faut absolument tout détruire?

    et j'ai aussi un autre problème

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    class ImageSequence{
        private:
        Image **img;
        unsigned short size,current;
        public:
            ImageSequence(unsigned short size = 1){
            img = new Image*[size];
            for(current=0;current<size;current++) img[current]=null;
            this->size=size;
            current=0;
        }
        ~ImageSequence(){
            delete[] img;
        }
        void setImage(unsigned short  index,Image *image){
            if(img[index]!=null) delete img[index];
            printf("setting at %i value %p\n",index,image);
            img[index]=image;
            printf("now %p\n",img[index]);
        }
        Image *getImage(unsigned short index){
            printf("the value %p\n",img[index]);
            return img[index];
        }
        Image* nextImage(){
            Image *image = img[current];
            current=(current+1)%size;
           return image;
        }
    };
    Je ne sais pas si c'est bien fait, je veux faire un tableau de pointeurs d'image.
    Le problème, quand je modifie une image le printf de setImage() me donne bien la valeur du pointeur qui a été modifiée mais quand j'appelle nextImage() je reçois toujours 0.

  4. #4
    Membre éprouvé Avatar de Jérémy Lefevre
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2004
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 898
    Points : 969
    Points
    969
    Par défaut
    Un delete permet de libérer l'espace mémoire. Mais quand le programme se termine, l'espace alloué pour le programme se vide ou bien pas, il faut absolument tout détruire?
    il faut juste detruire ce qui existe !

    Je ne sais pas si c'est bien fait, je veux faire un tableau de pointeurs d'image.
    Sacré mélange de C et de C++ dans ton code !
    essai de travailler avec des vecteurs et evite les printf favorise les cout.

  5. #5
    Membre actif Avatar de Belegkarnil
    Inscrit en
    Juin 2005
    Messages
    289
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Juin 2005
    Messages : 289
    Points : 205
    Points
    205
    Par défaut
    Ok merci ;-)
    Les printf je vais les enlever c'était juste pour voir les adresse.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 8
    Dernier message: 17/05/2019, 17h27
  2. Réponses: 2
    Dernier message: 09/12/2008, 22h03
  3. [ProFTPd][glibc detected double free or corruption]
    Par Théolude dans le forum Administration système
    Réponses: 1
    Dernier message: 28/08/2008, 09h19
  4. erreur glibc detected double free or corruption.
    Par Screwt-K dans le forum C++
    Réponses: 1
    Dernier message: 02/07/2007, 16h46
  5. Problème d'éxécution: double free or corruption
    Par ciol_tebroc dans le forum C++
    Réponses: 3
    Dernier message: 17/05/2006, 19h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo