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

Langage C++ Discussion :

reserve d'un std::vector impossible


Sujet :

Langage C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif Avatar de Sahengette
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 79
    Par défaut reserve d'un std::vector impossible
    Bonjour,
    Je tente dans un programme d'allouer de la mémoire à un std::vector, à l'aide de reserve mais lors du lancement du programme, j'ai une grosse pause et un message incompréhensible m'annoncant une erreur tout autant improbable :
    *** glibc detected *** /home/theodor/Programme/BBEngine/bin/bin: free(): invalid next size (fast): 0x08086f70 ***
    ======= Backtrace: =========
    /lib/libc.so.6(+0x73842)[0xb7c65842]
    /usr/lib/libstdc++.so.6(_ZdlPv+0x1f)[0xb7e8c38f]
    /usr/lib/libstdc++.so.6(_ZNSs4_Rep10_M_destroyERKSaIcE+0x1b)[0xb7e7382b]
    /usr/lib/libstdc++.so.6(_ZNSt18basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev+0xd0)[0xb7e6bc10]
    /home/theodor/Programme/BBEngine/bin/bin(_ZN3bbe13ObjMeshLoader11ChargerMeshENS_5NMeshESs+0x617)[0x8054d53]
    /home/theodor/Programme/BBEngine/bin/bin(main+0x9b)[0x805042f]
    /lib/libc.so.6(__libc_start_main+0xf3)[0xb7c0b483]
    /home/theodor/Programme/BBEngine/bin/bin[0x8050301]
    ======= Memory map: ========
    08048000-0805a000 r-xp 00000000 08:04 11013039 /home/theodor/Programme/BBEngine/bin/bin
    0805a000-0805b000 rw-p 00012000 08:04 11013039 /home/theodor/Programme/BBEngine/bin/bin
    0805b000-0809e000 rw-p 00000000 00:00 0 [heap]
    b5e0b000-b5e0e000 rw-p 00000000 00:00 0
    b5e0e000-b5e13000 r-xp 00000000 08:03 935586 /usr/lib/libXdmcp.so.6.0.0
    b5e13000-b5e14000 r--p 00004000 08:03 935586 /usr/lib/libXdmcp.so.6.0.0
    b5e14000-b5e15000 rw-p 00005000 08:03 935586 /usr/lib/libXdmcp.so.6.0.0
    b5e15000-b5e17000 r-xp 00000000 08:03 938843 /usr/lib/libXau.so.6.0.0
    b5e17000-b5e18000 r--p 00001000 08:03 938843 /usr/lib/libXau.so.6.0.0
    b5e18000-b5e19000 rw-p 00002000 08:03 938843 /usr/lib/libXau.so.6.0.0
    b5e19000-b5e22000 r-xp 00000000 08:03 920336 /usr/lib/libXrender.so.1.3.0
    b5e22000-b5e23000 r--p 00008000 08:03 920336 /usr/lib/libXrender.so.1.3.0
    b5e23000-b5e24000 rw-p 00009000 08:03 920336 /usr/lib/libXrender.so.1.3.0
    b5e24000-b5e41000 r-xp 00000000 08:03 938902 /usr/lib/libxcb.so.1.1.0
    b5e41000-b5e42000 rw-p 0001d000 08:03 938902 /usr/lib/libxcb.so.1.1.0
    b5e42000-b5e43000 rw-p 00000000 00:00 0
    b5e43000-b5e4a000 r-xp 00000000 08:03 261667 /lib/librt-2.15.so
    b5e4a000-b5e4b000 r--p 00006000 08:03 261667 /lib/librt-2.15.so
    b5e4b000-b5e4c000 rw-p 00007000 08:03 261667 /lib/librt-2.15.so
    b5e4c000-b5e53000 r-xp 00000000 08:03 940718 /usr/lib/libXrandr.so.2.2.0
    b5e53000-b5e54000 r--p 00006000 08:03 940718 /usr/lib/libXrandr.so.2.2.0
    b5e54000-b5e55000 rw-p 00007000 08:03 940718 /usr/lib/libXrandr.so.2.2.0
    b5e55000-b5e58000 r-xp 00000000 08:03 266416 /lib/libdl-2.15.so
    b5e58000-b5e59000 r--p 00002000 08:03 266416 /lib/libdl-2.15.so
    b5e59000-b5e5a000 rw-p 00003000 08:03 266416 /lib/libdl-2.15.so
    b5e5a000-b5e6b000 r-xp 00000000 08:03 939876 /usr/lib/libXext.so.6.4.0
    b5e6b000-b5e6c000 r--p 00010000 08:03 939876 /usr/lib/libXext.so.6.4.0
    b5e6c000-b5e6d000 rw-p 00011000 08:03 939876 /usr/lib/libXext.so.6.4.0
    b5e6d000-b5f9f000 r-xp 00000000 08:03 939795 /usr/lib/libX11.so.6.3.0
    b5f9f000-b5fa3000 rw-p 00131000 08:03 939795 /usr/lib/libX11.so.6.3.0
    b5fa3000-b7b5c000 r-xp 00000000 08:03 940792 /usr/lib/libnvidia-glcore.so.295.20
    b7b5c000-b7bbe000 rwxp 01bb9000 08:03 940792 /usr/lib/libnvidia-glcore.so.295.20
    b7bbe000-b7bd2000 rwxp 00000000 00:00 0
    b7bd2000-b7bd3000 rw-p 00000000 00:00 0
    b7bd3000-b7bd6000 r-xp 00000000 08:03 940797 /usr/lib/libnvidia-tls.so.295.20
    b7bd6000-b7bd7000 rw-p 00002000 08:03 940797 /usr/lib/libnvidia-tls.so.295.20
    b7bd7000-b7bee000 r-xp 00000000 08:03 261651 /lib/libpthread-2.15.so
    b7bee000-b7bef000 r--p 00016000 08:03 261651 /lib/libpthread-2.15.so
    b7bef000-b7bf0000 rw-p 00017000 08:03 261651 /lib/libpthread-2.15.so
    b7bf0000-b7bf2000 rw-p 00000000 00:00 0
    b7bf2000-b7d8e000 r-xp 00000000 08:03 269722 /lib/libc-2.15.so
    b7d8e000-b7d90000 r--p 0019c000 08:03 269722 /lib/libc-2.15.so
    b7d90000-b7d91000 rw-p 0019e000 08:03 269722 /lib/libc-2.15.so
    b7d91000-b7d94000 rw-p 00000000 00:00 0
    b7d94000-b7db0000 r-xp 00000000 08:03 918669 /usr/lib/libgcc_s.so.1
    b7db0000-b7db1000 rw-p 0001b000 08:03 918669 /usr/lib/libgcc_s.so.1
    b7db1000-b7ddb000 r-xp 00000000 08:03 266418 /lib/libm-2.15.so
    b7ddb000-b7ddc000 r--p 00029000 08:03 266418 /lib/libm-2.15.so
    b7ddc000-b7ddd000 rw-p 0002a000 08:03 266418 /lib/libm-2.15.so
    b7ddd000-b7dde000 rw-p 00000000 00:00 0
    b7dde000-b7ebb000 r-xp 00000000 08:03 918650 /usr/lib/libstdc++.so.6.0.16
    b7ebb000-b7ebf000 r--p 000dd000 08:03 918650 /usr/lib/libstdc++.so.6.0.16
    b7ebf000-b7ec0000 rw-p 000e1000 08:03 918650 /usr/lib/libstdc++.so.6.0.16
    b7ec0000-b7ec7000 rw-p 00000000 00:00 0
    b7ec7000-b7ed0000 r-xp 00000000 08:03 920611 /usr/lib/libsfml-system.so.2.0
    b7ed0000-b7ed1000 r--p 00008000 08:03 920611 /usr/lib/libsfml-system.so.2.0
    b7ed1000-b7ed2000 rw-p 00009000 08:03 920611 /usr/lib/libsfml-system.so.2.0
    b7ed2000-b7ee4000 r-xp 00000000 08:03 920613 /usr/lib/libsfml-window.so.2.0
    b7ee4000-b7ee5000 r--p 00011000 08:03 920613 /usr/lib/libsfml-window.so.2.0
    b7ee5000-b7ee6000 rw-p 00012000 08:03 920613 /usr/lib/libsfml-window.so.2.0
    b7ee6000-b7f90000 r-xp 00000000 08:03 940791 /usr/lib/libGL.so.295.20
    b7f90000-b7faf000 rwxp 000a9000 08:03 940791 /usr/lib/libGL.so.295.20
    b7faf000-b7fbe000 rwxp 00000000 00:00 0
    b7fdb000-b7fdd000 rw-p 00000000 00:00 0
    b7fdd000-b7fde000 r-xp 00000000 00:00 0 [vdso]
    b7fde000-b7ffe000 r-xp 00000000 08:03 269731 /lib/ld-2.15.so
    b7ffe000-b7fff000 r--p 0001f000 08:03 269731 /lib/ld-2.15.so
    b7fff000-b8000000 rw-p 00020000 08:03 269731 /lib/ld-2.15.so
    bffdf000-c0000000 rw-p 00000000 00:00 0 [stack]

    Program received signal SIGABRT, Aborted.
    0xb7fdd424 in __kernel_vsyscall ()
    pour info voici le code concerne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    b_sn.reserve( b_normales.size() );
    au début je pensais peut etre que le max_size de mon b_sn ne supportait pas les 1497 entrées de b_normales, mais non car le max_size que j'arrive à récuperer est un nombre gigantesque, ce qui ne m'étonne pas car manquer de mémoires pour 1500 misérables flottants ...
    en fait j'aimerais créer une copie de b_normales pour ensuite les ranger à ma façon, j'ai essayé de faire directement
    mais même erreur ...
    je suis en debug mode, et l'erreur que j'ai récuperé au dessus vient de gdb, dans mon programme, la console se bloque là dessus :
    *** glibc detected *** ./bin/bin: free(): invalid next size (fast): 0x08adbff8 ***
    *** glibc detected *** ./bin/bin: malloc(): smallbin double linked list corrupted: 0x08ad8498 ***
    Merci d'avoir lu

  2. #2
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,

    Pourrais tu donner un code un tout petit plus complet, que nous puissions nous faire une idée

    Pourrais tu, par exemple, nous indiquer comment est rempli b_normales, car, si tu obtiens une valeur aberrante, je ne serais pas étonné que tu aies, tout simplement, eu recours à une manière erronée de remplir ce tableau
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  3. #3
    Membre actif Avatar de Sahengette
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 79
    Par défaut
    b_normales est tout simplement rempli à coup de push_back, rien d'autre.
    le reste du code ne concerne pas les vectors mais si ça vous intéresse ^^

  4. #4
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Si tu as utilisé push_back, il n'y a, a priori, aucune raison que b_normales.size() te renvoie une valeur aberrante... il faut donc investiguer d'avantage, mais, sans le code qui manipule ce vector, meme la boule de crystal ne pourra pas nous aider aujourd'hui
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  5. #5
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Je pense que le problème est très probablement dans "l'autre code", une corruption mémoire qui vient faire le bordel dans le code...

    Est-ce que tu as les moyens d'utiliser un outil d'aide au debuggage de ce genre de choses (valgring, purify, intel // studio,...) ? A part une relecture de l'ensemble de ton code à la recherche de trucs louches, c'est probablement le plus rentable.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  6. #6
    Membre actif Avatar de Sahengette
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 79
    Par défaut
    Je veux bien vous passer le fichier en question, il est pas trop trop long, mais j'aimerais signaler qu'en cherchant sur le net j'ai vu que ce problème était en lien à des free/malloc pas bien géré , le problème étant que je ne manipule que des vector de flottants, donc pas de new/delete/free/malloc, et que le bug surgit pile poil sur la copie ou le reserve() du vector, donc on "dirait" un problème en interne de la fonction (même si je ne pense pas que ca soit le cas, j'ai plus confiance d'en une certaine mesure à la lib standard de gcc qu'en mon code à moi ).
    Donc voila, si vous pensez que du code pourrez vous aider, n'hésitez pas.

Discussions similaires

  1. std::vector : dynamique ou statique, pile et tas
    Par salseropom dans le forum SL & STL
    Réponses: 7
    Dernier message: 24/01/2005, 13h22
  2. std::sort() sur std::vector()
    Par tut dans le forum SL & STL
    Réponses: 20
    Dernier message: 05/01/2005, 19h15
  3. char[50] et std::vector<>
    Par tut dans le forum SL & STL
    Réponses: 9
    Dernier message: 12/10/2004, 13h26
  4. Réponses: 8
    Dernier message: 26/08/2004, 18h59
  5. Sauvegarde std::vector dans un .ini
    Par mick74 dans le forum MFC
    Réponses: 2
    Dernier message: 12/05/2004, 13h30

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