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 *)
得到不同的结果,可能是因为您的分配太小,结果导致堆缓冲区溢出和内存损坏。
我有一个双精度类型的指针,它指向使用 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 *)
得到不同的结果,可能是因为您的分配太小,结果导致堆缓冲区溢出和内存损坏。