我需要为4个指向浮点数(2D)的指针分配内存,这要在多次迭代(6次)中进行。但是在第二次迭代时,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);
}
使用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]和P_i[3]指向同一个地址0x804d500,我找不到原因: /
malloc
函数倾向于使用C语言,但转换它返回的void *
指针则属于C++。如果你在使用C语言,请不要强制转换malloc
函数返回的指针类型。 - Elias Van Ootegemmalloc
返回值时出现问题,很可能你正在使用 C++ 编译器。 - Elias Van Ootegem