Devo allocare memoria per 4 puntatori ai puntatori su float (2D) su molte iterazioni (6), ma alla seconda iterazione, malloc mi dà lo stesso indirizzo per due allocazioni. Codice:risultati imprevisti per l'allocazione di memoria con la funzione c malloc
int i=0, a=0;
for(i=0;i<6;i++)
{
float** P_i=(float**) malloc(4*sizeof(float*));
for(a=0;a<4;a++) P_i[a]=(float*) calloc(4,sizeof(float));
for(a=0;a<4;a++) free(P_i[a]);
free(P_i);
}
Debugging con gdb:
(gdb) print i
$42 = 1
(gdb) set $pos=0
(gdb) print P_i[$pos++]
$51 = (float *) 0x804d500
(gdb) print P_i[$pos++]
$52 = (float *) 0x804d148
(gdb) print P_i[$pos++]
$53 = (float *) 0x804d4e8
(gdb) print P_i[$pos++]
$54 = (float *) 0x804d500
p_i [0] e p_i [3] puntare allo stesso indirizzo 0x804d500 e non riesco a trovare il motivo:/
C o C++? L'uso di 'malloc' tende a suggerire C, ma lanciare il' void * 'restituisce è una cosa C++. Se stai usando C, non riesci a restituire 'malloc' e co_ –
c. Ho provato a rimuovere il cast ma ottengo una conversione non valida da 'void *' a 'float *' – DahoM
Che compilatore stai utilizzando? Se si lamentano dei valori di ritorno 'malloc', è probabile che si stia utilizzando un compilatore C++ –