我对这会做些什么有一些想法,但我想要一个更专业和经验丰富的解释。
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 in-line执行错误处理?
感谢任何有助于澄清此事的人!
答案 0 :(得分:2)
sizeof(s)
的值是实现,ABI是特定的(至少是51 - 在sizeof(short)==1
和short
- s的假想奇怪机器上可能是51像char
一样对齐;我不能命名任何这样的机器)。但是在我的Linux / Debian / Sid / x86-64系统上(x86-64 ABI),它是52.而sizeof
是在编译时计算的。
如何使用malloc in-line执行错误处理?
通常的做法可能是
s *name = malloc(sizeof(s));
if (!name) { perror("malloc of name"); exit(EXIT_FAILURE); };
答案 1 :(得分:2)
malloc
的返回值。 malloc返回void *并在C中,void *隐式转换为您指定的任何类型...... sizeof(s)
返回的值取决于填充以及实现(cos,sizeof(unsigned short)
在不同平台上会有所不同......)。在C中,如果要检查错误,则必须将malloc
的返回值与NULL
进行比较。
if(name == NULL)exit(1); // EXIT_FAILURE