gpt4 book ai didi

检查 malloc/calloc 的分配

转载 作者:行者123 更新时间:2023-12-02 09:09:39 27 4
gpt4 key购买 nike

每次使用 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 -> name 并在分配失败时退出?

最佳答案

首先,don't cast the return value of malloc因为它可以隐藏其他错误。

malloc 包装在将为您执行 null 检查的函数中没有问题。由于 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 检查。

关于检查 malloc/calloc 的分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53950294/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com