我怎样才能同时返回和释放内存

How can i return and also free memory at the same time

提问人:Alper Tangil 提问时间:7/20/2023 最后编辑:philipxyAlper Tangil 更新时间:9/11/2023 访问量:67

问:

我有一个函数,可以分配内存,然后用数据填充它,然后返回它。

我想释放这个分配的内存,但是如果我在返回之前释放它,它将返回 null,如果我尝试在返回后释放,因为函数在看到返回时结束,它不会释放。

我尝试了返回和返回之类的方法,但它们不起作用。(free(x));((x)free);

C 内存 返回 malloc free

评论

3赞 William Pursell 7/20/2023
你不能。如果释放内存,则引用内存将不再有效。如果希望所有权模型使分配内存的每个组件都负责释放内存,则必须要求调用方将内存传递到函数。但是,让调用方释放内存是相当典型的。例如,考虑在这种情况下分配内存,调用方释放它。x = strdup(); free(x);strdup
3赞 chux - Reinstate Monica 7/20/2023
@Alper坦吉尔。“我有一个函数,可以分配一部分内存......” -->发布代码,而不仅仅是描述它。
0赞 user3386109 7/20/2023
你的朋友可能指的是智能指针。这些在 C++ 中可用,但在 C 中不可用。
0赞 chux - Reinstate Monica 7/20/2023
@Alper坦吉尔。“另外,如果我尝试在返回后释放,因为函数在看到返回时结束,它不会释放备忘录。”诚然,该函数不会释放内存,但这没关系。调用代码可以释放内存。为什么不希望调用代码释放内存?
0赞 philipxy 9/11/2023
本网站使用英文。

答:

3赞 ikegami 7/20/2023 #1

访问已释放的内存是未定义的行为。因此,返回指向已释放内存的指针是没有用的。您只需将其留给调用方,以便在完成后将其释放。

1赞 Mateo Vozila 7/20/2023 #2

您可以将指针传递到函数,分配内存并将所需的数据写入其中。函数返回后,指向数据的指针将在调用方函数中可用,与以前相同,并分配内存并存储数据。在对数据执行所需的操作后,您可以释放那里的内存。