每次
使用 malloc/calloc 后检查地址是否为 asagin 似乎是一个很好的编程实践。
是否有一个选项可以创建一个函数来检查分配是否成功? 当我们投射时,我们每次都会强制转换点的类型,因此函数将不知道它是哪种指针类型。
例如:
newUser -> name = (char*)malloc(NAME_LENGTH*sizeof(char));
if (newUser -> name == NULL){
printf("Allocation of newUser failedn");
exit(1);
}
User *newUser = (User*)malloc(sizeof(User));
if(newUser == NULL){
printf("Allocation of newUser failedn");
exit(1);
}
是否可以创建一个函数来获取 newUser 和 newUser -> 名称,并在分配失败时退出?
首先,不要强制转换 malloc
的返回值,因为它可以隐藏其他错误。
malloc
包装在一个将为您执行空检查的函数中没有问题。 由于malloc
采用size_t
并返回void *
因此包装器函数也应该这样做。 例如:
void *safe_malloc(size_t s)
{
void *p = malloc(s);
if (!p) {
perror("malloc failed");
exit(1);
}
return p;
}
然后,您可以在任何使用malloc
的地方使用此函数,而无需显式执行 NULL 检查。