检查malloc/calloc的分配

gbo*_*box 2 c malloc

如果地址是asagin,那么在使用malloc/calloc后每次检查似乎是一个很好的编程实践.

是否有选项可以创建一个函数来检查分配是否成功?当我们演员时,我们每次都会施放点的类型,因此函数不知道它是哪种指针类型.

例如:

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);
    }
Run Code Online (Sandbox Code Playgroud)

是否可以创建一个获取newUser和newUser - > name的函数,如果分配失败将退出?

dbu*_*ush 5

首先,不要转换返回值,malloc因为它可以隐藏其他错误.

包装malloc在一个可以为你进行空检查的函数中没有问题.由于malloca size_t和返回void *你的包装函数应该做同样的事情.例如:

void *safe_malloc(size_t s)
{
    void *p = malloc(s);
    if (!p) {
        perror("malloc failed");
        exit(1);
    }
    return p;
}
Run Code Online (Sandbox Code Playgroud)

然后,您可以在任何地方使用此函数,malloc而无需显式执行NULL检查.