首页 > 解决方案 > Malloc中内存分配期间分配大小的意义

问题描述

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

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

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

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

将 * 添加到括号大小的双精度会有什么区别?这样的改变有什么意义吗?我是在计算指向双精度的指针的大小而不是双精度的大小吗?我问这样一个问题是因为当我计算 y2[0] 的工厂并说 y2[0] 等于 -0.02 时,答案是 0.00,而当我计算 y1[0] 和 y1[ 的工厂的答案时0] 等于 -0.02 答案是 0.02。

标签: mallocdynamic-memory-allocationabsolute-value

解决方案


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

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

如果你得到不同的结果sizeof (double *),很可能是因为你的分配太小,结果你遇到了堆缓冲区溢出和内存损坏。


推荐阅读