在Malloc中分配内存期间分配大小的意义

时间:2018-07-26 09:34:43

标签: malloc dynamic-memory-allocation absolute-value

我有一个double类型的指针,该指针使用malloc指向分配的内存,其中我在数组中分配了12个元素:

double *y = (double*)malloc(sizeof(double) *  12); 

我的问题如下。假设我以这种方式分配了内存:

double *y2 = (double*)malloc(sizeof(double*) *  12); 

将*加到括号大小的两倍中会产生什么区别?这样的改变有什么意义?我是在计算要加倍的指针的大小而不是加倍的大小吗?我问这样一个问题,因为当我来计算y2 [0]的fab并说y2 [0]等于-0.02时,答案将变为0.00,而当我计算y1 [0]和y1 [ 0]等于-0.02,答案是0.02。

1 个答案:

答案 0 :(得分:0)

sizeof (double)对于double值数组的元素大小是正确的。对于sizeof (double *) pointers 指针数组,double是正确的值。

在大多数64位体系结构上,sizeof (double)sizeof (double *)都恰好是8,但是在大多数32位体系结构上,sizeof (double)是8,而sizeof (double *)是4,所以有所不同。

如果您使用sizeof (double *)获得不同的结果,则可能是因为您的分配太小,并且您遇到了堆缓冲区溢出和内存损坏的情况。