gpt4 book ai didi

c - C 函数应该什么时候返回新分配的内存?

转载 作者:太空狗 更新时间:2023-10-29 16:34:44 24 4
gpt4 key购买 nike

在其他地方的回复中,我发现了以下片段:

In general it is nicer in C to have the caller allocate memory, not the callee - hence why strcpy is a "nicer" function, in my opinion, than strdup.

我可以看出这是一个有效的模式,但为什么它会被认为更好呢?遵循这种模式有什么好处吗?还是不行?

例子

最近我写了相当多的代码,看起来像这样:

struct foo *a = foo_create();
// do something with a
foo_destroy(a);

如果 foo 不仅仅是一个平面结构,那么我想我可以将所有初始化放在一个步骤中。另外,假设该结构应该在堆上。为什么做这样的事情会更好:

struct foo *a = malloc(sizeof(foo));
foo_init(a);
// do something with a
foo_destroy(a)

最佳答案

每当你想要一个不透明的结构并且不想在头文件中暴露它的内部结构时。您的 foo_create() 示例说明了这一点。

另一个例子是 Windows API。例如。 CreateWindow 给你一个HWND。您不知道实际的 WND 结构是什么样子,也无法触及它的字段。

与内核对象句柄相同。例如。 CreateEvent 给出一个HANDLE。您只能使用定义良好的 API 来操作它,并使用 CloseHandle() 关闭它。

回复:

struct foo *a = malloc(sizeof(foo));

这需要您在 header 中定义 struct foo,从而公开其内部结构。如果您想改变它,您可能会破坏(错误地)直接依赖其成员的现有代码。

关于c - C 函数应该什么时候返回新分配的内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1972421/

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