Anmelden

Archiv verlassen und diese Seite im Standarddesign anzeigen : c++ - corrupted double-linked list



buchwaldj
23-04-2010, 10:22
hi,
ich hab ein mpi(mpich) programm in dem ich arrays mit dynamisch allokiertem speicher definiert hab. wenn ich den speicher am ende mit delete freigeben möchte, bekomm ich immer den fehler das ich den speicher doppelt freigebe(auch wenn ich es threadweise probiere...) und wenn sich das programm beendet ohne das vorher der speicher freigegeben wurde, kommt seltsamerweise immer am ende nach dem ausführen folgender felher:


*** glibc detected *** ./akinhor_mpi: corrupted double-linked list: 0x000000000081ea00 ***
*** glibc detected *** ./akinhor_mpi: corrupted double-linked list: 0x000000000081ea00 ***
======= Backtrace: =========
/lib/libc.so.6[0x7fefe43e0928]
/lib/libc.so.6[0x7fefe43e0bf0]
======= Backtrace: =========
/lib/libc.so.6[0x7fefe43e26e8]
*** glibc detected *** ./akinhor_mpi: corrupted double-linked list: 0x000000000081ea00 ***
/lib/libc.so.6(cfree+0x76)[0x7fefe43e2a36]
/lib/libc.so.6[0x7feef011fbf0]
/usr/lib/libstdc++.so.6(_ZNSt13basic_filebufIcSt11char_trai tsIcEE26_M_destroy_internal_bufferEv+0x1e)[0x7fefe4947a8e]
/lib/libc.so.6(cfree+0x76)[0x7feef0121a36]
/usr/lib/libstdc++.so.6(_ZNSt13basic_filebufIcSt11char_trai tsIcEE5closeEv+0x64)[0x7fefe4949024]
======= Backtrace: =========
/usr/lib/libstdc++.so.6/usr/lib/libstdc++.so.6(_ZNSt13basic_filebufIcSt11char_trai tsIcEE26_M_destroy_internal_bufferEv./akinhor_mpi[0x40780a]
*** glibc detected *** ./akinhor_mpi: corrupted double-linked list: 0x000000000081ea00 ***
/lib/libc.so.6/usr/lib/libstdc++.so.6(_ZNSt13basic_filebufIcSt11char_trai tsIcEE5closeEv./akinhor_mpi(__gxx_personality_v0+0x119)[0x4035b9]
======= Memory map: ========
/lib/libc.so.6[0x7fb25ad15bf0]
/usr/lib/libstdc++.so.6(_ZNSt14basic_ifstreamIcSt11char_tra itsIcEED1Ev+0x4a)[0x7feef068cefa]
./akinhor_mpi[0x40780a]
/lib/libc.so.6[0x7fb25ad176e8]
/lib/libc.so.6(__libc_start_main+0xe6)[0x7feef00ca1a6]
./akinhor_mpi(__gxx_personality_v0+0x119)[0x4035b9]
======= Memory map: ========
/lib/libc.so.6(cfree+0x76)[0x7fb25ad17a36]
======= Backtrace: =========
00400000-00591000 r-xp 00000000 08:13 1527170 /home/joerg/akinhor_mpi
00790000-00797000 rw-p 00190000 08:13 1527170 /home/joerg/akinhor_mpi
00797000-102cf000 rw-p 00797000 00:00 0 [heap]
7feee8000000-7feee8021000 rw-p 7feee8000000 00:00 0
7feee8021000-7feeec000000 ---p 7feee8021000 00:00 0
7feeefea8000-7feeefeaa000 r-xp 00000000 08:11 1599629 /lib/libdl-2.7.so
7feeefeaa000-7feef00aa000 ---p 00002000 08:11 1599629 /lib/libdl-2.7.so
7feef00aa000-7feef00ac000 rw-p 00002000 08:11 1599629 /lib/libdl-2.7.so
7feef00ac000-7feef01f6000 r-xp 00000000 08:11 1599637 /lib/libc-2.7.so
7feef01f6000-7feef03f5000 ---p 0014a000 08:11 1599637 /lib/libc-2.7.so
7feef03f5000-7feef03f8000 r--p 00149000 08:11 1599637 /lib/libc-2.7.so
7feef03f8000-7feef03fa000 rw-p 0014c000 08:11 1599637 /lib/libc-2.7.so
7feef03fa00/lib/libc.so.60-7feef03ff000 rw-p 7feef03fa000 00:00 0
7feef03ff000-7feef0415000 r-xp 00000000 08:11 1572998 /lib/libgcc_s.so.1
7feef0415000-7feef0615000 ---p 00016000 08:11 1572998 /lib/libgcc_s.so.1
7feef0615000-7feef0616000 rw-p 00016000 08:11 1572998 /lib/libgcc_s.so.1
7feef0616000-7feef0707000 r-xp 00000000 08:04 2703468 /usr/lib/libstdc++.so.6.0.10
7feef0707000-7feef0906000 ---p 000f1000 08:04 2703468 /usr/lib/libstdc++.so.6.0.10
7feef0906000-7feef090c000 r--p 000f0000 08:04 2703468 /usr/lib/libstdc++.so.6.0.10
7feef090c000-7feef090f000 rw-p 000f6000 08:04 2703468 /usr/lib/libstdc++.so.6.0.10
7feef090f000-7feef0922000 rw-p 7feef090f000 00:00 0
7feef0922000-7feef09a4000 r-xp 00000000 08:11 1599645 /lib/libm-2.7.so
7feef09a4000-7feef0ba3000 ---p 00082000 08:11 1599645 /lib/libm-2.7.so
7feef0ba3000-7feef0ba5000 rw-p 00081000 08:11 1599645 /usr/lib/libstdc++.so.6(_ZNSt13basic_filebufIcSt11char_trai tsIcEE5closeEv+0x64)[0x7fb25b27e024]
/lib/libc.so.6[0x7fbf5574fbf0]
/usr/lib/libstdc++.so.6(_ZNSt14basic_ifstreamIcSt11char_tra itsIcEED1Ev+0x4a)[0x7fb25b282efa]
./akinhor_mpi[0x40780a]
/lib/libc.so.6[0x7fbf557516e8]
*** glibc detected *** ======= Memory map: ========
/lib/libc.so.6(cfree+0x76)[0x7fbf55751a36]
/usr/lib/libstdc++.so.6(_ZNSt13basic_filebufIcSt11char_trai tsIcEE26_M_destroy_internal_bufferEv+0x1e)[0x7fbf55cb6a8e]
00400000-00591000 r-xp 00000000 08:13 1527170 /home/joerg/akinhor_mpi
00790000-00797000 rw-p 00190000 08:13 1527170 /home/joerg/akinhor_mpi
00797000-102cf000 rw-p 00797000 00:00 0 [heap]
7fb254000000-7fb254021000 rw-p 7fb254000000 00:00 0
7fb254021000-7fb258000000 ---p 7fb254021000 00:00 0
7fb25aa9e000-7fb25aaa0000 r-xp 00000000 08:11 1599629 /lib/libdl-2.7.so
7fb25aaa0000-7fb25aca0000 ---p 00002000 08:11 1599629 /lib/libdl-2.7.so
7fb25aca0000-7fb25aca2000 rw-p 00002000 08:11 1599629 /lib/libdl-2.7.so
7fb25aca2000-7fb25adec000 r-xp 00000000 08:11 1599637 /lib/libc-2.7.so
7fb25adec000-7fb25afeb000 ---p 0014a000 08:11 1599637 /lib/libc-2.7.so
7fb25afeb000-7fb25afee000 r--p 00149000 08:11 1599637 /lib/libc-2.7.so
7fb25afee000-7fb25aff0000 rw-p 0014c000 08:11 1599637 /lib/libc-2.7.so
7fb25aff000/usr/lib/libstdc++.so.6(_ZNSt13basic_filebufIcSt11char_trai tsIcEE5closeEv+0x64)[0x7fbf55cb8024]
0-7fb25aff5000 rw-p 7fb25aff0000 00:00 0
7fb25aff5000-7fb25b00b000 r-xp 00000000 08:11 1572998 /lib/libgcc_s.so.1
7fb25b00b000-7fb25b20b000 ---p 00016000 08:11 1572998 /lib/libgcc_s.so.1
7fb25b20b000-7fb25b20c000 rw-p 00016000 08:11 1572998 /lib/libgcc_s.so.1
7fb25b20c000-7fb25b2fd000 r-xp 00000000 08:04 2703468 /usr/lib/libstdc++.so.6.0.10
7fb25b2fd000-7fb25b4fc000 ---p 000f1000 08:04 2703468 /usr/lib/libstdc++.so.6.0.10
7fb25b4fc000-7fb25b502000 r--p 000f0000 08:04 2703468 /usr/lib/libstdc++.so.6.0.10
7fb25b502000-7fb25b505000 rw-p 000f6000 08:04 2703468 /usr/lib/libstdc++.so.6.0.10
7fb25b505000-7fb25b518000 rw-p 7fb25b505000 00:00 0
7fb25b518000-7fb25b59a000 r-xp 00000000 08:11 1599645 /lib/libm-2.7.so
7fb25b59a000-7fb25b799000 ---p 00082000 08:11 1599645 /lib/libm-2.7.so
7fb25b799000-7fb25b79b000 rw-p 00081000 08:11 1599645 /usr/lib/libstdc++.so.6(_ZNSt14basic_ifstreamIcSt11char_tra itsIcEED1Ev+0x4a)[0x7fbf55cbcefa]
/lib/libm-2.7.so
7fb25b79b000-7fb25b7a3000 r-xp 00000000 08:11 1599628 /lib/librt-2.7.so
7fb25b7a3000-7fb25b9a2000 ---p 00008000 08:11 1599628 /lib/librt-2.7.so
7fb25b9a2000-7fb25b9a4000 rw-p 00007*** glibc detected *** ./akinhor_mpi: corrupted double-linked list: 0x000000000081ea00 ***
00400000-00591000 r-xp 00000000 08:13 1527170 /home/joerg/akinhor_mpi
00790000-00797000 rw-p 00190000 08:13 1527170 /home/joerg/akinhor_mpi
00797000-102cf000 rw-p 00797000 00:00 0 [heap]
7fbf50000000-7fbf50021000 rw-p 7fbf50000000 00:00 0
7fbf50021000-7fbf54000000 ---p 7fbf50021000 00:00 0
7fbf554d8000-7fbf554da000 r-xp 00000000 08:11 1599629 /lib/libdl-2.7.so
7fbf554da000-7fbf556da000 ---p 00002000 08:11 1599629 /lib/libdl-2.7.so
7fbf556da000-7fbf556dc000 rw-p 00002000 08:11 1599629 /lib/libdl-2.7.so
7fbf556dc000-7fbf55826000 r-xp 00000000 08:11 1599637 /lib/libc-2.7.so
7fbf55826000-7fbf55a25000 ---p 0014a000 08:11 1599637 /lib/libc-2.7.so
7fbf55a25000-7fbf55a28000 r--p 00149000 08:11 1599637 /lib/libc-2.7.so/lib/libc.so.6[0x7feef11bb928]
/lib/libc.so.6[0x7feef11bbbf0]
/lib/libc.so.6[0x7feef11bd6e8]
/lib/libc.so.6(cfree+0x76)[0x7feef11bda36]
/usr/lib/libstdc++.so.6(_ZNSt13basic_filebufIcSt11char_trai tsIcEE26_M_destroy_internal_bufferEv+0x1e)[0x7feef1722a8e]
/usr/lib/libstdc++.so.6(_ZNSt13basic_filebufIcSt11char_trai tsIcEE5closeEv+0x64)[0x7feef1724024]
/usr/lib/libstdc++.so.6(_ZNSt14basic_ifstreamIcSt11char_tra itsIcEED1Ev+0x4a)[0x7feef1728efa]
./akinhor_mpi[0x40780a]
/lib/libc.so.6(__libc_start_main+0xe6)[0x7feef11661a6]
./akinhor_mpi(__gxx_personality_v0+0x119)[0x4035b9]
======= Memory map: ========
00400000-00591000 r-xp 00000000 08:13 1527170 /home/joerg/akinhor_mpi
00790000-00797000 rw-p 00190000 08:13 1527170 /home/joerg/akinhor_mpi
00797000-102cf000 rw-p 00797000 00:00 0 [heap]
7feeec000000-7feeec021000 rw-p 7feeec000000 00:00 0
7feeec021000-7feef0000000 ---p 7feeec021000 00:00 0
7feef0f44000-7feef0f46000 r-xp 00000000 08:11 1599629 /lib/libdl-2.7.so
7feef0f46000-7feef1146000 ---p 00002000 08:11 1599629 /lib/libdl-2.7.so
7feef1146000-7feef1148000 rw-p 00002000 08:11 1599629 /lib/libdl-2.7.so
7feef1148000-7feef1292000 r-xp 00000000 08:11 1599637 /lib/libc-2.7.so
7feef1292000-7feef1491000 ---p 0014a000 08:11 1599637 /lib/libc-2.7.so
7feef1491000-7feef1494000 r--p 00149000 08:11 1599637 /lib/libc-2.7.so
7feef1494000-7feef1496000 rw-p 0014c000 08:11 1599637 /lib/libc-2.7.so
7feef1496000-7feef149b000 rw-p 7feef1496000 00:00 0
7feef149b000-7feef14b1000 r-xp 00000000 08:11 1572998 /lib/libgcc_s.so.1
7feef14b1000-7feef16b1000 ---p 00016000 08:11 1572998 /lib/libgcc_s.so.1
7feef16b1000-7feef16b2000 rw-p 00016000 08:11 1572998 /lib/libgcc_s.so.1
7feef16b2000-7feef17a3000 r-xp 00000000 08:04 2703468
vieleicht kann mir da jmd helfen, thx.

John W
23-04-2010, 12:29
Wo ist der Source?

buchwaldj
26-04-2010, 11:53
allokieren tu ich den speicher folgendermaszen:


double ***v;
v=new double** [mx+1];
for(int i=0; i<=mx+1;i++){
v[i]=new double* [mz+1];
for(int j=0; j<=mz+1;j++){
v[i][j]=new double[4];
}
}
double **zeta;
zeta=new double* [mx+1];
for(int i=0; i<=mx+1;i++){
zeta[i]=new double[mz+1];
}

der obige fehler tritt auf wenn ich den speicher nicht wieder freigebe.
wenn ich ihn mit

MPI::Finalize ( );
for(int i=0; i<=(mx+1); i++){
for(int j=0;j<=(mz+1);j++){
delete[] v[i][j];

}
delete[] v[i];
delete[] v;
delete[] zeta[i];
delete[] zeta;
}
freigebe bekomm ich dann einen "double free or corruption" error.

John W
26-04-2010, 14:07
Hast du mal versucht, "delete[] v;" und "delete[] zeta;" aus der äußeren Schleife rauszunehmen (außerhalb der Schleife ausführen)?
Nur so ein Verdacht.

locus vivendi
26-04-2010, 14:37
Die Abbruchbedingung in den Schleifen ist nicht richtig, daher werden die Puffergrenzen nicht eingehalten.

Bedenke auch, dass Speicheranforderungen mal schiefgehen können. Das könnte bei dir dazu führen, dass du versuchst ungültige Zeiger freizugeben, oder Speicher verlierst. Letzteres ist vielleicht nicht ganz so schlimm, ersteres schon.

buchwaldj
26-04-2010, 18:22
Hast du mal versucht, "delete[] v;" und "delete[] zeta;" aus der äußeren Schleife rauszunehmen (außerhalb der Schleife ausführen)?
Nur so ein Verdacht.

ja, hab ich; selbes problem.:(

locus vivendi
26-04-2010, 21:10
Und die Schleifenköpfe zu verändern, gemäß meiner "Diagnose", bringt das nichts?

buchwaldj
27-04-2010, 11:52
jep, ganz dummer off by one error, ich war da einfach gedanklich auf der falschen fährte....
thx.