sto scrivendo una piccola libreria per le matrici . Non ho intenzione di reinventare la ruota etc etc .
Veniamo al dunque ecco il sorgente:
Codice: Seleziona tutto
#include <stdio.h>
#include <stdlib.h>
struct _matrix_t
{
double **m;
int r;
int c;
};
typedef struct _matrix_t matrix_t;
typedef double* M_STREAM;
void _matrix_stream_T(M_STREAM *dati) {
int righe,colonne,a,b,i=2;
printf("\t Immetti rispettivamente il numero di righe e di colonne :\n\t");
scanf("%d",&righe);
scanf("%d",&colonne);
*dati=malloc(sizeof(double)*(righe*colonne+2));
*(*dati)=righe;
*(*dati+1)=colonne;
for(a=0;a<righe;a++){
printf("\n Inserisci i %d elementi appartenenti alla riga %d,\n",colonne,a+1);
printf(" separati dallo spazio, e premi invio:\n\t ");
for(b=0;b<colonne;b++){
printf("\n ");
scanf("%lf",&(*(*dati+i)));
i++;
}
}
}
void _matrix_new(matrix_t *matrix,int r,int c){
int i;
matrix->r=r;
matrix->c=c;
matrix->m=malloc(sizeof(double *)*r);
for(i=0; i<=r; i++)
*((matrix->m) + i)=malloc(sizeof(double ) * c);
return ;
}
int main(void) {
M_STREAM dati;
matrix_t a;
_matrix_stream_T(&dati);
_matrix_new(&a,dati[0],dati[1]); /*commentando questa riga nessun errore*/
free(dati);
}
Codice: Seleziona tutto
*** glibc detected *** prova: corrupted double-linked list: 0x0804a060 ***
======= Backtrace: =========
/lib/libc.so.6[0xb7ebfb56]
/lib/libc.so.6(cfree+0x90)[0xb7ec3370]
prova[0x8048d5a]
/lib/libc.so.6(__libc_start_main+0xe0)[0xb7e6a390]
prova[0x80483c1]
======= Memory map: ========
08048000-08049000 r-xp 00000000 08:02 1294 /home/toni2/matrix/prova
08049000-0804a000 rw-p 00001000 08:02 1294 /home/toni2/matrix/prova
0804a000-0806b000 rw-p 0804a000 00:00 0 [heap]
b7d00000-b7d21000 rw-p b7d00000 00:00 0
b7d21000-b7e00000 ---p b7d21000 00:00 0
b7e53000-b7e54000 rw-p b7e53000 00:00 0
b7e54000-b7f9a000 r-xp 00000000 08:01 28712 /lib/libc-2.7.so
b7f9a000-b7f9b000 r--p 00146000 08:01 28712 /lib/libc-2.7.so
b7f9b000-b7f9d000 rw-p 00147000 08:01 28712 /lib/libc-2.7.so
b7f9d000-b7fa1000 rw-p b7f9d000 00:00 0
b7fb6000-b7fc0000 r-xp 00000000 08:01 223027 /usr/lib/libgcc_s.so.1
b7fc0000-b7fc1000 rw-p 00009000 08:01 223027 /usr/lib/libgcc_s.so.1
b7fc1000-b7fc3000 rw-p b7fc1000 00:00 0
b7fc3000-b7fc4000 r-xp b7fc3000 00:00 0 [vdso]
b7fc4000-b7fe0000 r-xp 00000000 08:01 28952 /lib/ld-2.7.so
b7fe0000-b7fe2000 rw-p 0001b000 08:01 28952 /lib/ld-2.7.so
bf8cd000-bf8e2000 rw-p bffeb000 00:00 0 [stack]
Abortito
Aggiungo che se non chiamo la funzione _matrix_new . Non ottengo nessun errore tutto liscio.
Grazie a tutti.
(é gradito qualche consiglio su come utilizzare in modo produttivo gdb )