【问题标题】:pointer size issue in malloc in C [duplicate]C中malloc中的指针大小问题[重复]
【发布时间】:2017-04-27 14:03:02
【问题描述】:

我正在尝试编写一个 c 程序,它可以打印指向 malloc() 分配的内存位置的指针变量的大小。

我使用的C版本是C99。

下面是我的代码:

#include<stdio.h> 

int main() 
{ 
int *temp; 
temp=malloc(sizeof(int)*3); 
printf("%d %d\n",sizeof(int),sizeof(temp)); 
return 0; 
} 

我得到的输出是:

sh-4.2$ ./f1 4 8

根据代码, printf 应该为两个表达式打印相同的值。即 12. sizeof(int)=4.

因为我已经为 temp 分配了 12 字节的内存,所以 sizeof(temp) 应该返回 12。但是,它返回的值是 8。

我想知道可能是什么原因?有知道的请回答。

【问题讨论】:

  • printf("%d %d\n",sizeof(int),sizeof(temp)); ---> printf("%zu%zu\n",sizeof(int),sizeof(temp));
  • sizeof 返回 size_t,而不是 int。您的代码调用了未定义的行为。
  • 如果指针是一个数组,它将被称为“数组”,而不是“指针”。
  • @Lps:你能快速解释一下 %zu 的用途吗?
  • 正如您在The Man 上看到的z 格式说明符意味着:以下整数转换对应于size_t 或ssize_t 参数。 u 代表对于未签名的

标签: c pointers malloc


【解决方案1】:

sizeof 不返回动态分配内存的大小,它只是打印变量的大小,8 是临时指针变量的大小,而不是临时地址指向的内存大小

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-25
    • 1970-01-01
    • 2021-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-06
    • 2021-11-22
    相关资源
    最近更新 更多