当我请求20时,为什么malloc给我8个字节?

时间:2016-02-18 00:42:18

标签: c malloc sizeof

我刚刚第一次在C里玩,而且我不知道为什么malloc没有给我我预期的内存量。以下代码:

printf("Allocating %ld bytes of memory\n", 5*sizeof(int));
int *array = (int *) malloc(5*sizeof(int));
printf("%ld bytes of memory allocated\n", sizeof(array));

结果:

Allocating 20 bytes of memory
8 bytes of memory allocated

我已经检查过我确实在调用malloc来给我20个字节,但是不明白为什么在调用malloc之后,指针只有8个字节。

2 个答案:

答案 0 :(得分:5)

array不是数组,而是int *。所以它的大小总是指针的大小。

sizeof运算符不会告诉您在指针处动态分配了多少内存。

如果另一方面你有这个:

int array2[5];

然后sizeof(array2)将是20,假设int是4个字节。

答案 1 :(得分:4)

sizeof运算符会告诉您其操作数的大小。 array的类型为int*(指向int的指针),占用平台上的八个字节。 sizeof运算符无法确定数组array实际指向的时长。什么是回报并不表示已经分配了多少内存。

malloc()函数失败(在这种情况下它返回NULL)或成功,在这种情况下它返回一个指向内存区域的指针,至少与你需要它一样大。