繁体   English   中英

指针-转换为结构指针+ Malloc

[英]Pointers - Casting as Struct Pointer + Malloc

我对此有一些想法,但是我想要一个更专业,更有经验的解释。

typedef struct{
     char str[50];
     unsigned short num;
}s;

s *name = (s *) malloc(sizeof(s));

第一部分定义一个结构。 对于那件事我没有任何疑问
这将创建一个指向“ s”结构的指针。 malloc()返回一个内存地址,该地址将被转换为指向“ s”的指针。 但是,我相信sizeof(s)我在理解某些问题。

char str[50]; = 50个字节。
unsigned short num; = 2个字节。

sizeof(s)返回52个字节?

malloc(sizeof(s))分配52个字节并返回第一个地址,并将其强制转换为指向“ s”的指针?

还有一个问题! 如何使用内联malloc执行错误处理?

感谢任何可以帮助您澄清这一点的人!

sizeof(s)的值是实现和特定于ABI的值sizeof(s)至少为51-,在假设的怪异机器上, sizeof(short)==1short -s像char一样对齐,可能为51;我不能命名任何此类机器)。 但是在我的Linux / Debian / Sid / x86-64系统(带有x86-64 ABI )上,它是sizeof是在编译时计算的。

如何使用内联malloc执行错误处理?

通常的做法是

s *name = malloc(sizeof(s));
if (!name) { perror("malloc of name"); exit(EXIT_FAILURE); };
  • 在C语言中,我们无需malloc的返回值。 malloc返回void *,在C中,void *隐式转换为您指定的任何类型...
  • sizeof(s)返回的值取决于填充以及实现(cos, sizeof(unsigned short)在不同平台上会有所不同...)。
  • 在C语言中,如果要检查错误,则必须将malloc的返回值与NULL进行比较。

    如果(name == NULL)退出(1); // EXIT_FAILURE

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM