gpt4 book ai didi

c - 从 POSIX 函数返回指针的一般内存所有权规则是什么?

转载 作者:太空宇宙 更新时间:2023-11-04 03:15:15 27 4
gpt4 key购买 nike

今天我想调用 strerror POSIX 函数。它返回一个 char*,现在我不确定是否要 free 它或不 free 它。

The application shall not modify the string returned.

我认为返回指针应该是指向内部静态缓冲区的指针,在那种情况下,我永远不应该碰它。但是,它只是说“不要修改”,根本不谈论内存所有权。我很困惑。我会将“无接触”假设为“系统拥有,调用者借用”,但我仍然没有信心,因为这只是我的推断,而不是 promise 或定义。

我对 C/POSIX 编程不是很熟悉。我认为这必须有一个完善的约定或明确的规则,但我找不到。

C/POSIX 函数的内存所有权规则是什么?

最佳答案

惯例是您不释放指针(或写入指针)除非返回它的函数的描述告诉您应该释放它。但是,表达 that 的 POSIX 习语有点奇怪,所以很容易混淆。

例如,对于 strdup and strndup它是:

The returned pointer can be passed to free(). […] duplicating the provided s in a new block of memory allocated as if by using malloc()

对于 realpath ,是这样的:

If resolved_name is a null pointer, the generated pathname shall be stored as a null-terminated string in a buffer allocated as if by a call to malloc().

将此与 getaddrinfo 的文档进行对比或 fopen ,它不使用这种语言。相反,您应该使用特定的释放函数(freeadrinfofclose)。

简而言之,每次 POSIX 表示可以将指针传递给 free指向分配的内存的指针,就好像使用 malloc( ),这实际上意味着如果你想避免内存泄漏,你需要释放那个指针。否则,不允许释放指针。

关于c - 从 POSIX 函数返回指针的一般内存所有权规则是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52574866/

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