unbekannter Fehler
-
Huhu, soll den Fehler in einem Programm finden.
Also hab die stelle mit dem Debugger gefunden, wo er rausfliegt.
und den Fehler*** glibc detected *** /home/tim/workspace2/mash2/Debug/mash2: double free or corruption (out): 0x0000000003d6f0a0 *** ======= Backtrace: ========= /lib64/libc.so.6[0x7ffff7381108] /lib64/libc.so.6(cfree+0x76)[0x7ffff7382c66] /home/tim/workspace2/mash2/Debug/mash2[0x4096ab] /home/tim/workspace2/mash2/Debug/mash2[0x4096dd] /home/tim/workspace2/mash2/Debug/mash2[0x40971e] /home/tim/workspace2/mash2/Debug/mash2[0x40979b] /home/tim/workspace2/mash2/Debug/mash2[0x4063e9] /home/tim/workspace2/mash2/Debug/mash2[0x40d99c] /lib64/libc.so.6(__libc_start_main+0xe6)[0x7ffff732b586] /home/tim/workspace2/mash2/Debug/mash2[0x402849] ======= Memory map: ======== 00400000-0042d000 r-xp 00000000 08:06 3238314 /home/tim/workspace2/mash2/Debug/mash2 0062d000-0062e000 r--p 0002d000 08:06 3238314 /home/tim/workspace2/mash2/Debug/mash2 0062e000-0062f000 rw-p 0002e000 08:06 3238314 /home/tim/workspace2/mash2/Debug/mash2 0062f000-04931000 rw-p 0062f000 00:00 0 [heap] 7ffff0000000-7ffff0021000 rw-p 7ffff0000000 00:00 0 7ffff0021000-7ffff4000000 ---p 7ffff0021000 00:00 0 7ffff58c7000-7ffff64c8000 rw-p 7ffff58c7000 00:00 0 7ffff64d6000-7ffff70cb000 rw-p 7ffff64d6000 00:00 0 7ffff730d000-7ffff745c000 r-xp 00000000 08:06 2845257 /lib64/libc-2.9.so 7ffff745c000-7ffff765c000 ---p 0014f000 08:06 2845257 /lib64/libc-2.9.so 7ffff765c000-7ffff7660000 r--p 0014f000 08:06 2845257 /lib64/libc-2.9.so 7ffff7660000-7ffff7661000 rw-p 00153000 08:06 2845257 /lib64/libc-2.9.so 7ffff7661000-7ffff7666000 rw-p 7ffff7661000 00:00 0 7ffff7666000-7ffff767c000 r-xp 00000000 08:06 2845440 /lib64/libgcc_s.so.1 7ffff767c000-7ffff787c000 ---p 00016000 08:06 2845440 /lib64/libgcc_s.so.1 7ffff787c000-7ffff787d000 r--p 00016000 08:06 2845440 /lib64/libgcc_s.so.1 7ffff787d000-7ffff787e000 rw-p 00017000 08:06 2845440 /lib64/libgcc_s.so.1 7ffff787e000-7ffff78d3000 r-xp 00000000 08:06 2845261 /lib64/libm-2.9.so 7ffff78d3000-7ffff7ad2000 ---p 00055000 08:06 2845261 /lib64/libm-2.9.so 7ffff7ad2000-7ffff7ad3000 r--p 00054000 08:06 2845261 /lib64/libm-2.9.so 7ffff7ad3000-7ffff7ad4000 rw-p 00055000 08:06 2845261 /lib64/libm-2.9.so 7ffff7ad4000-7ffff7bc5000 r-xp 00000000 08:06 1251002 /usr/lib64/libstdc++.so.6.0.10 7ffff7bc5000-7ffff7dc4000 ---p 000f1000 08:06 1251002 /usr/lib64/libstdc++.so.6.0.10 7ffff7dc4000-7ffff7dcb000 r--p 000f0000 08:06 1251002 /usr/lib64/libstdc++.so.6.0.10 7ffff7dcb000-7ffff7dcd000 rw-p 000f7000 08:06 1251002 /usr/lib64/libstdc++.so.6.0.10 7ffff7dcd000-7ffff7de0000 rw-p 7ffff7dcd000 00:00 0 7ffff7de0000-7ffff7dfe000 r-xp 00000000 08:06 2847676 /lib64/ld-2.9.so 7ffff7fd3000-7ffff7fd6000 rw-p 7ffff7fd3000 00:00 0 7ffff7ff9000-7ffff7ffc000 rw-p 7ffff7ff9000 00:00 0 7ffff7ffc000-7ffff7ffd000 r-xp 7ffff7ffc000 00:00 0 [vdso] 7ffff7ffd000-7ffff7ffe000 r--p 0001d000 08:06 2847676 /lib64/ld-2.9.so 7ffff7ffe000-7ffff7fff000 rw-p 0001e000 08:06 2847676 /lib64/ld-2.9.so 7ffffffea000-7ffffffff000 rw-p 7ffffffea000 00:00 0 [stack] ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0 [vsyscall]wirft.
Allerdings habe ich so was noch nie gesehen, sieht für mich so nach nem Memory Fehler oder so aus??gruß Tim
-
Rufst Du free(..) mehrmals auf dasselbe Objekt auf?
Simon
-
Ein Hinweis steht da ja schon. Entweder du wendest zweimal free/delete auf den gleichen Zeiger an, oder du produzierst eine (heap) corruption. Sieh dir mal alle Stellen an, die mit malloc/new zu tun haben. Vielleicht schreibst du einfach über den gültigen Bereich hinaus oder so.
-
Das ist nichtmal mein Programm, ich bin nur der doofe der die Fehler in Programmen die nicht kommentiert sind suchen darf...
also er fliegt hier raus:
for (int i = 0; i < gv->elem_connect.size(); ++i) { for (int j = 1; j < gv->elem_connect[i].size(); ++j) { if(copy[i][j] >= control_flag) { int row_index = gv->elem_connect[i][j]; int column_index = utils::Search_Index(gv->node_connect[row_index], i); gv->node_connect[row_index][column_index]=copy[i][j]; } } }ich sehe da nix mit (free) oder (delte). Aber an sich ist es kein syntaktischer Fehler sondern ein Logischer Fehler im Programm der diesen Fehler verursacht?
gruß Tim
-
Rustyspoon schrieb:
Aber an sich ist es kein syntaktischer Fehler sondern ein Logischer Fehler im Programm der diesen Fehler verursacht?
Klar, mit einem Syntax-Fehler kommst du gar nicht bis zur Ausführung (da meckert der Compiler und erstellt dir gar keine exe).
-
Wenn du einen guten Debugger hast, dann wird er dir sagen, welchen Wert welche Variable hat. Da sind viele Array's und irgendwas davon ist vielleicht nicht gesetzt oder verweißt ins Nirvana.