Malloc内存分配时分配大小的意义

Significance of Assigning Size of during Memory Allocation in Malloc

我有一个双精度类型的指针,它指向使用 malloc 分配的内存,我在数组中分配了 12 个元素:

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

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

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

在括号大小的double后面加上*号会有什么不同?这样的改变有什么意义吗?我计算的是指向 double 的指针的大小而不是 double 的大小吗?我问这样一个问题是因为当我计算 y2[0] 的晶圆厂并说 y2[0] 等于 -0.02 时,答案是 0.00 而当我计算 y1[0] 和 y1[ 的晶圆厂的答案时0] 等于 -0.02 答案是 0.02。

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

在大多数64位架构上,sizeof (double)sizeof (double *)恰好都是8,但在大多数32位架构上,sizeof (double)是8,但是sizeof (double *)是4,所以有区别。

如果您使用 sizeof (double *) 得到不同的结果,可能是因为您的分配太小,结果导致堆缓冲区溢出和内存损坏。