Realloc功能无法正常工作?

时间:2014-01-02 19:52:29

标签: c memory memory-management sizeof realloc

为什么以下代码输出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);

2 个答案:

答案 0 :(得分:7)

sizeof是一个编译时运算符,可以告诉您变量或类型占用多少空间。你得到的答案是常数。对于指针,sizeof告诉您存储内存地址所需的字节数。这通常在32位平台上为4个字节,在64位平台上为8个字节。

它不会告诉您malloc()分配了多少内存。事实证明,遗憾的是没有标准函数来告诉你分配的内存块的大小。你必须自己跟踪它。

答案 1 :(得分:4)

sizeof在编译时评估,而不是运行时(除了可变长度数组的情况,C99的奇怪特征)。在这种情况下,您将获取指针的大小,即4个字节。即使您使用sizeof(*pointer),也相当于说sizeof(int)

我意识到你尝试来告诉动态分配内存的大小,但没有标准的方法来做到这一点。您应该在自己的代码中自己跟踪它。