Il problema è il seguente:
quando nella diagonale compaiono degli 0 (prima o dopo l'eliminazione di Gauss) questi vengono usati per ridurre la matrice a forma triangolare e ovviamente viene diviso tutto per 0 e il programma restituisce nan o inf. Allora ho creato la condizione con l'if che se si trova un elemento in diagonale con 0 (quelli con indici uguali dunque) l'intera riga viene spostata verso il basso e quella sotto viene spostata su. Il problema è che la riga che da sotto passa sopra bypassa l'eliminazione di gauss e non viene ridotta. Avete idee ?
In piu
come faccio a deallocare tutto ?
alla fine della funzione io scrivo:
codice:
for(int i=0;i<o;i++) {delete M[i];delete m[i];};
for(int i=o;i<2*o;i++) {delete m[i];};
delete m;
delete M;
delete tmp;
Ma mi viene restituito un errore in fase di esecuzione:
codice:
*** glibc detected *** ./a.out: double free or corruption (out): 0x0000000000be20e0 ***
======= Backtrace: =========
/lib/x86_64-linux-gnu/libc.so.6(+0x7e626)[0x7f5b38d98626]
./a.out[0x401a80]
./a.out[0x401b2e]
/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xed)[0x7f5b38d3b76d]
./a.out[0x400939]
======= Memory map: ========
00400000-00402000 r-xp 00000000 08:05 786731 /home/dario/a.out
00602000-00603000 r--p 00002000 08:05 786731 /home/dario/a.out
00603000-00604000 rw-p 00003000 08:05 786731 /home/dario/a.out
00be2000-00c03000 rw-p 00000000 00:00 0 [heap]
7f5b38806000-7f5b3880a000 rw-p 00000000 00:00 0
7f5b3880a000-7f5b3881f000 r-xp 00000000 08:05 1445543 /lib/x86_64-linux-gnu/libgcc_s.so.1
7f5b3881f000-7f5b38a1e000 ---p 00015000 08:05 1445543 /lib/x86_64-linux-gnu/libgcc_s.so.1
7f5b38a1e000-7f5b38a1f000 r--p 00014000 08:05 1445543 /lib/x86_64-linux-gnu/libgcc_s.so.1
7f5b38a1f000-7f5b38a20000 rw-p 00015000 08:05 1445543 /lib/x86_64-linux-gnu/libgcc_s.so.1
7f5b38a20000-7f5b38b19000 r-xp 00000000 08:05 1445554 /lib/x86_64-linux-gnu/libm-2.15.so
7f5b38b19000-7f5b38d18000 ---p 000f9000 08:05 1445554 /lib/x86_64-linux-gnu/libm-2.15.so
7f5b38d18000-7f5b38d19000 r--p 000f8000 08:05 1445554 /lib/x86_64-linux-gnu/libm-2.15.so
7f5b38d19000-7f5b38d1a000 rw-p 000f9000 08:05 1445554 /lib/x86_64-linux-gnu/libm-2.15.so
7f5b38d1a000-7f5b38ecd000 r-xp 00000000 08:05 1445522 /lib/x86_64-linux-gnu/libc-2.15.so
7f5b38ecd000-7f5b390cc000 ---p 001b3000 08:05 1445522 /lib/x86_64-linux-gnu/libc-2.15.so
7f5b390cc000-7f5b390d0000 r--p 001b2000 08:05 1445522 /lib/x86_64-linux-gnu/libc-2.15.so
7f5b390d0000-7f5b390d2000 rw-p 001b6000 08:05 1445522 /lib/x86_64-linux-gnu/libc-2.15.so
7f5b390d2000-7f5b390d7000 rw-p 00000000 00:00 0
7f5b390d7000-7f5b391b9000 r-xp 00000000 08:05 926486 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.16
7f5b391b9000-7f5b393b8000 ---p 000e2000 08:05 926486 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.16
7f5b393b8000-7f5b393c0000 r--p 000e1000 08:05 926486 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.16
7f5b393c0000-7f5b393c2000 rw-p 000e9000 08:05 926486 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.16
7f5b393c2000-7f5b393d7000 rw-p 00000000 00:00 0
7f5b393d7000-7f5b393f9000 r-xp 00000000 08:05 1445502 /lib/x86_64-linux-gnu/ld-2.15.so
7f5b395db000-7f5b395dc000 rw-p 00000000 00:00 0
7f5b395f4000-7f5b395f9000 rw-p 00000000 00:00 0
7f5b395f9000-7f5b395fa000 r--p 00022000 08:05 1445502 /lib/x86_64-linux-gnu/ld-2.15.so
7f5b395fa000-7f5b395fc000 rw-p 00023000 08:05 1445502 /lib/x86_64-linux-gnu/ld-2.15.so
7fff67cf2000-7fff67d13000 rw-p 00000000 00:00 0 [stack]
7fff67dff000-7fff67e00000 r-xp 00000000 00:00 0 [vdso]
ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0 [vsyscall]
Aborted
Si può risolvere ?