为什么以下代码输出4次,而不是8次和20次? 感谢
int size = 0;
int *pointer;
pointer = malloc(2 * sizeof(int));
size = sizeof(pointer);
printf("%d", size);
int *temp = realloc(pointer, 5 * sizeof(int));
if (temp != NULL) //realloc was successful
{
pointer = temp;
} else //there was an error
{
free(pointer);
printf("Error allocating memory!\n");
}
size = sizeof(pointer);
printf("%d", size);
答案 0 :(得分:7)
sizeof
是一个编译时运算符,可以告诉您变量或类型占用多少空间。你得到的答案是常数。对于指针,sizeof
告诉您存储内存地址所需的字节数。这通常在32位平台上为4个字节,在64位平台上为8个字节。
它不会告诉您malloc()
分配了多少内存。事实证明,遗憾的是没有标准函数来告诉你分配的内存块的大小。你必须自己跟踪它。
答案 1 :(得分:4)
sizeof
在编译时评估,而不是运行时(除了可变长度数组的情况,C99的奇怪特征)。在这种情况下,您将获取指针的大小,即4个字节。即使您使用sizeof(*pointer)
,也相当于说sizeof(int)
我意识到你尝试来告诉动态分配内存的大小,但没有标准的方法来做到这一点。您应该在自己的代码中自己跟踪它。