施放为结构指针+ 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执行错误处理?

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


  • 在C中,我们不需要施加malloc的返回值。 malloc返回void *,并在C中,void *隐式转换为您指定的任何类型...
  • sizeof(s)返回的值取决于填充和实现(cos, sizeof(unsigned short)在不同的平台上会有所不同)。
  • 在C中,如果你想检查错误,你必须将malloc的返回值与NULL进行比较。

    if(name == NULL)exit(1); // EXIT_FAILURE


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

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

    通常的做法可能是

    s *name = malloc(sizeof(s));
    if (!name) { perror("malloc of name"); exit(EXIT_FAILURE); };
    
    链接地址: http://www.djcxy.com/p/28459.html

    上一篇: Casting as Struct Pointer + Malloc

    下一篇: realloc and malloc functions