假设我有以下 C 代码:
void myfunction() {
time_t t = 0;
struct tm *ct;
time(&t);
ct = localtime(&t);
}
如您所见,localtime
函数返回一个指向 struct tm
变量的新指针。据我所知,要使函数返回的变量在调用方上下文中有效,它至少需要满足以下条件之一:
- 返回的变量必须在调用者的上下文或与调用者相关的更高上下文中声明。
- 返回的变量必须在堆上分配内存。
在我的例子中,第一点不适用,所以认为第二点已经实现是正常的。
我说得对吗?
如果是,那是否意味着我需要在使用完 ct
变量后调用 free ?
如果没有,你能详细一点吗?
谢谢!
编辑:
从回复中,我了解到要求中应该还有另一点,即变量在返回的上下文中可用。那应该是静态变量。还有其他可能吗?
最佳答案
几个较旧的 C 函数返回指向静态缓冲区的指针。 localtime
就是其中之一。您不需要(实际上不应该;如果这样做,您的程序可能会出现段错误)从 localtime
释放返回的指针。
问题是进程空间中只有一个localtime
缓冲区,下一次调用localtime
(即使在另一个线程中)会覆盖结果之前返回。这就是为什么几乎所有以这种方式运行的函数(strtok
是另一个例子)现在都有新的 _r
版本,将它们的结果放在用户传入的缓冲区中,因此线程安全。
关于c - 是否需要释放用于函数返回变量的内存 (C)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15517380/