检查malloc / calloc的分配

时间:2018-12-27 20:05:06

标签: c malloc

在每次使用malloc / calloc之后检查地址是否为asagin似乎是一种好的编程习惯。

是否可以选择创建一个函数来检查分配是否成功?每次投射时,我们都会投射点的类型,因此函数将不知道它是哪种指针类型。

例如:

newUser -> name = (char*)malloc(NAME_LENGTH*sizeof(char));
    if (newUser -> name == NULL){
        printf("Allocation of newUser failed\n");
        exit(1);
    } 

User *newUser = (User*)malloc(sizeof(User));
    if(newUser == NULL){
        printf("Allocation of newUser failed\n");
        exit(1);
    }

是否可以创建一个获得newUser和newUser->名称并在分配失败时退出的函数?

1 个答案:

答案 0 :(得分:5)

首先,don't cast the return value of 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检查。