gpt4 book ai didi

c - 在 C 中处理错误和释放内存的正确方法

转载 作者:行者123 更新时间:2023-12-03 07:40:23 25 4
gpt4 key购买 nike

在某些函数中,我需要使用 malloc() 分配内存并有几个 if..else 语句,如伪代码所示:

allocate memory
if condition_1
do_stuff
if condition_2
do_more_stuff
else
error
else
error
free allocated memory
return

所以我一开始就分配内存,如果一切正常,它就会被释放。但目前错误功能仅打印错误消息并退出程序。但是正如我经常读到的那样,尽管当程序退出并且操作系统处理通常处理之后的释放时,不释放内存,但它不是好的风格。怎么偷懒把钱放出来?我是否必须编写一个错误函数,将每个指针都指向我分配的必须释放的内存,指针可能具有不同的数据类型?或者我应该在调用错误函数之前放置 free(ptr) 吗?一个错误函数,它接受一个数据类型为 void 的指针数组,并且比 all 释放更多,可以做到这一点吗?

最佳答案

我有两个解决方案。

您可以在调用freeerror 的地方放置一个标签:

void function(void)
{
Memory *p = malloc(sizeof(*p));
if (condition_1) {
do_stuff();
if (condition_2) {
do_more_stuff();
} else {
goto err;
}
} else {
goto err;
}
free(p);
return;
err:
free(p);
error();
}

您还可以使用标志来标记错误:

void function(void)
{
Memory *p = malloc(sizeof(*p));
bool err = false;
if (condition_1) {
do_stuff();
if (condition_2) {
do_more_stuff();
} else {
err = true;
}
} else {
err = true;
}
free(p);
if (err)
error();
}

我认为第二种解决方案在这种情况下看起来最好,但它们都同样有效。

关于c - 在 C 中处理错误和释放内存的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28835150/

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