我刚刚第一次在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个字节。
答案 0 :(得分:5)
array
不是数组,而是int *
。所以它的大小总是指针的大小。
sizeof
运算符不会告诉您在指针处动态分配了多少内存。
如果另一方面你有这个:
int array2[5];
然后sizeof(array2)
将是20,假设int
是4个字节。
答案 1 :(得分:4)
sizeof
运算符会告诉您其操作数的大小。 array
的类型为int*
(指向int
的指针),占用平台上的八个字节。 sizeof
运算符无法确定数组array
实际指向的时长。什么是回报并不表示已经分配了多少内存。
malloc()
函数失败(在这种情况下它返回NULL
)或成功,在这种情况下它返回一个指向内存区域的指针,至少与你需要它一样大。