C语言 为什么在malloc()的参数中使用sizeof() ?



就像这本书告诉我的那样int *list = malloc(3 * sizeof(int))

但这有什么问题?int *list = malloc(3)

我的理解是malloc接受&;size&;作为一个参数,我的目标是只让指针list接受其中的3个值,但是为什么我要在使用malloc时包括sizeof(int)?

让我们看看这行代码:

int *list = malloc(3 * sizeof(int))

它创建了一个指向int的指针,并为它分配了三倍于int值的内存。所以我们有足够的空间来存储三个int

我假设一个int占用四个字节的内存。因此,要存储其中的三个,我们需要12字节的内存(每个int 4字节乘以3个ints)。malloc以字节为单位分配空间,因此将为您提供12字节的内存(sizeof(int)将返回4字节,因为每个int*有4字节)。

现在让我们看看另一个版本:

int *list = malloc(3)

分配三个字节的内存。可悲的是,一个int是四个字节…所以你有足够的空间容纳3/4个int(再次,假设一个int是4个字节)。如果你想存储三个int型,你需要分配的内存等于int型大小的三倍,因此3 * sizeof(int)


*从技术上讲,有些平台的int不是四个字节。所以最好写sizeof(int)而不是4。不过现在不用担心这个。

malloc()的参数是您想要分配的字节数。

int* list = malloc(3)将只分配3个字节

32位平台上的每个整数为32位(4字节)。这可以通过sizeof(int)

获得一个包含3个整数的数组将占用3*sizeof(int),在32位平台上是12字节。

int* list = malloc(3*sizeof(int))

将为3个整数分配空间,在32位平台上为12字节

最新更新