施放为结构指针+ 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执行错误处理?
感谢任何人可以帮助澄清这一点!
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)==1
和short
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