c - Realloc 函数无法正常工作?

标签 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);

最佳答案

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

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

关于c - Realloc 函数无法正常工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20890700/

相关文章:

memory - 为什么Rust中的打印内存地址同时包含40位和48位地址?

linux - 在具有 x64 操作系统 (redhat 5.6) 的 x64 CPU (Xeon 7650) 上运行的 X64 应用程序的 2GB 障碍 - 为什么 + 要检查的内容

delphi - 我应该将 FastMM 包含文件包含在我的 Delphi 6 应用程序安装文件中吗?

c# - 在 C# 中设置对 null 的引用

内存中的 C# 数组比预期大

c - 如何扩展C程序中嵌入的文件资源

c - 使用数组打印菜单图标不起作用?

返回姓名首字母的 C 程序 (CS50)

c - 关于gcc编译的x86_64代码和C代码优化

c - 从 C 中的二进制文件读取数组返回不正确的值