Comment corriger *** glibc détecté *** erreur dans le programme

Dupliquer possible:
erreur détectée par la glibc

Bonjour, j’exécutais mon projet sous GNU C ++ lorsque j’ai reçu cette erreur lorsque j’ai appuyé sur une option dans le cas du commutateur. Comme le rest du programme s’exécute bien, je rest avec cette erreur. Je ne sais pas ce que c’est et pourquoi cela se produit. S’il vous plaît expliquer et guidez-moi où je peux commencer à regarder dans mon programme.

Détails de l’erreur:

*** glibc detected *** ./test.out: free(): invalid pointer: 0xbfb1c874 *** ======= Backtrace: ========= /lib/libc.so.6[0x55c0f1] /lib/libc.so.6(cfree+0x90)[0x55fbc0] ./test.out[0x809f855] ./test.out[0x804fbc0] ./test.out[0x804f9bb] ./test.out[0x80502bb] ./test.out[0x805084e] ./test.out[0x8050d07] /lib/libc.so.6(__libc_start_main+0xdc)[0x508e8c] ./test.out[0x8049981] ======= Memory map: ======== 004f3000-00631000 r-xp 00000000 08:01 6148422 /lib/libc-2.5.so 00631000-00633000 r-xp 0013e000 08:01 6148422 /lib/libc-2.5.so 00633000-00634000 rwxp 00140000 08:01 6148422 /lib/libc-2.5.so 00634000-00637000 rwxp 00634000 00:00 0 0078d000-007a7000 r-xp 00000000 08:01 6152013 /lib/ld-2.5.so 007a7000-007a8000 r-xp 00019000 08:01 6152013 /lib/ld-2.5.so 007a8000-007a9000 rwxp 0001a000 08:01 6152013 /lib/ld-2.5.so 007f9000-0081e000 r-xp 00000000 08:01 6148435 /lib/libm-2.5.so 0081e000-0081f000 r-xp 00024000 08:01 6148435 /lib/libm-2.5.so 0081f000-00820000 rwxp 00025000 08:01 6148435 /lib/libm-2.5.so 00b18000-00b23000 r-xp 00000000 08:01 6148439 /lib/libgcc_s-4.1.2-20080825.so.1 00b23000-00b24000 rwxp 0000a000 08:01 6148439 /lib/libgcc_s-4.1.2-20080825.so.1 08048000-080c6000 r-xp 00000000 00:1e 736543 /users/guest10/shashi/Demo/src/test.out 080c6000-080c7000 rwxp 0007e000 00:1e 736543 /users/guest10/shashi/Demo/src/test.out 080c7000-080cc000 rwxp 080c7000 00:00 0 08d05000-218b1000 rwxp 08d05000 00:00 0 [heap] b7e00000-b7e21000 rwxp b7e00000 00:00 0 b7e21000-b7f00000 ---p b7e21000 00:00 0 b7fab000-b7fac000 rwxp b7fab000 00:00 0 b7fc4000-b7fc7000 rwxp b7fc4000 00:00 0 b7fc7000-b7fc8000 r-xp b7fc7000 00:00 0 [vdso] bfb0b000-bfb21000 rw-p bffe9000 00:00 0 [stack] Abort 

S’il vous plaît aider .. Merci à Adv

La solution exacte ne peut être fournie que si vous nous montrez le code. L’erreur est cependant claire. Le code libère de la mémoire qui n’est pas ou plus valide. Cela signifie soit que l’adresse est fausse, parce que, par exemple, l’arithmétique de pointeur est effectuée sur le pointeur d’origine. Ou le pointeur a déjà été libéré (double libre).

Vous essayez probablement de free une mémoire qui n’a pas été allouée dynamicment. Peut-être avez-vous un gratin inutile ou une faute de frappe du genre: free(&buf) au lieu de free(buf) .

Comstackz votre programme avec l’ -g et exécutez-le via le débogueur ou le débogueur de mémoire . Cela vous montrera où l’erreur se produit exactement.

On dirait que vous essayez de free un invalid pointer . Vous pouvez exécuter le programme avec un programme de vérification de la mémoire tel que [Valgrind][1] comme suit:

 valgrind --tool=memcheck --leak-check=full --track-origins=yes --show-reachable=yes --log-file=val.log ./  

Regardez val.log et vous devriez pouvoir déterminer où se trouvent les memory leaks. Vous pouvez également essayer de parcourir le code avec gdb/ddd (debuggers) . Le programme échouera à l’endroit où l’ segmentation fault se produit. Pour rendre le code debuggable , vous devrez recomstackr votre code avec l’indicateur -g .

Vous pouvez également poster votre code ici et laisser la communauté voir où vous vous trompez.