Ich muss Speicher für 4 Zeiger auf Zeiger auf Float (2D) über viele Iterationen (6) zuweisen, aber in der zweiten Iteration, malloc gibt mir die gleiche Adresse für zwei Zuordnungen. Code:unerwartete Ergebnisse für die Speicherzuweisung mit c Malloc-Funktion
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 mit 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] und P_i [3] auf die gleiche Adresse 0x804d500 zeigen, und ich kann nicht, warum finden:/
C oder C++: Es sollte so etwas wie dieses? Der Gebrauch von 'malloc' neigt dazu, C vorzuschlagen, aber das' void * ', das es zurückgibt, zu werfen, ist eine C++ Sache. Wenn Sie C verwenden, wird die Rückgabe von "malloc" und co_ –
nicht c. Ich habe versucht, die Besetzung zu entfernen, aber ich bekomme eine ungültige Konvertierung von 'void *' zu 'float *' – DahoM
Welchen Compiler benutzen Sie? Wenn es sich beschweren über "malloc" Rückgabewerte zu werfen, nutzen Sie wahrscheinlich einen C++ Compiler –