2008-10-01 53 views
6

我调用getpwuid(uid)之后,我有一个指针的引用。当我不再使用它时,我应该释放它吗?阅读手册页时,它说它引用了一些静态区域,可能会被随后对相同函数的调用覆盖,所以我确信我是否应该触摸该内存区域。我应该在Linux中释放由getpwuid()返回的指针吗?

谢谢。

回答

9

不,您不需要解除结果。您只能通过malloc(3),calloc(3)或realloc(3)在堆上分配的指针调用free(3)。

静态数据是程序数据或bss段的一部分,并且会一直存在,直到进程退出(或被exec(2)覆盖)。

1

实际上它返回一个指向已经存在的结构的指针,所以你应该而不是释放它。

5

为线程安全(可重入)函数使用*_r函数(getpwuid_r()),该函数允许您提供缓冲区空间来放置返回的信息。确保检查errno是成功还是失败。如果不使用可重入函数,则可以安全地假定函数返回的数据不需要被释放,但是也会被连续调用相同函数的数据覆盖。

+0

似乎存在内存问题,甚至* _r函数 – codingfreak 2013-02-12 16:45:42

相关问题