我只是第一次用C语言玩,我不明白为什么malloc没有给我我期望的内存量。以下代码:
printf("Allocating %ld bytes of memoryn", 5*sizeof(int));
int *array = (int *) malloc(5*sizeof(int));
printf("%ld bytes of memory allocatedn", sizeof(array));
结果在:
Allocating 20 bytes of memory
8 bytes of memory allocated
我已经检查过我确实在调用 malloc 给我 20 个字节,但不明白为什么调用 malloc 后指针只有 8 个字节。
array
不是一个数组,而是一个int *
。 因此,它的大小将始终是指针的大小。
sizeof
运算符不会告诉您在指针上动态分配了多少内存。
另一方面,如果您有这个:
int array2[5];
那么sizeof(array2)
将是 20,假设int
是 4 个字节。
sizeof
运算符告诉您其操作数的大小。 array
具有类型 int*
(指向 int
的指针(,在您的平台上占用 8 个字节。sizeof
运算符无法找出数组array
指向的实际长度。返回值并不表示已分配了多少内存。
malloc()
函数要么失败(在这种情况下它返回NULL
(,要么成功,在这种情况下,它返回一个指向至少与您需要一样大的内存区域的指针。