在调用
谢谢。
getpwuid(uid)
后,我有一个指针的引用。当我不再使用它时,我应该释放那个指针吗?阅读手册,它说它引用了一些静态区域,可能会被后续对同一函数的调用覆盖,所以我不确定是否应该触及该内存区域。谢谢。
不需要释放结果。您只能在使用malloc(3)、calloc(3) 或 realloc(3)在堆上分配内存的指针上调用free(3)。
静态数据是程序数据段或bss段的一部分,将持续存在直到进程退出(或被exec(2)覆盖)。
使用*_r
函数(例如getpwuid_r()
)进行线程安全(可重入)操作,这些函数允许您提供缓冲区以存放返回的信息。一定要检查errno以确保成功或失败。如果不使用可重入函数,则可以安全地假设该函数返回的数据不需要被释放,但是会被后续调用相同函数的数据覆盖。
实际上它返回一个指向已经存在的结构体的指针,所以你不应该释放它。
getpwuid
都会被覆盖。这就是为什么它不是线程安全/可重入的原因。内存泄漏是指分配动态内存但从未释放它。 - camhgetpwuid
在分配新指针之前会清理旧的字符串指针。 - Alexandergetpwuid
时被覆盖。https://elixir.bootlin.com/glibc/latest/source/nss/getXXbyYY.c是其实现方式(类似于模板)。 - camh