关于C标准库实现中的内存管理细节问题
前些日子看到下面这样一段代码:
#include <time.h>
struct tm* Now()
{
time_t now;
struct tm* gmt;
time(&now);
gmt = localtime(&now);
return gmt;
}
int main()
printf("Now: %s\n", asctime(Now()));
return 0;
}
可以看到,函数Now返回一个指向struct tm类型的指针。这说明在localtime或其调用的子函数中利用动态内存分配技术分配了一个struct tm类型的变量(当然也有可能在库中预先分配了静态存储空间,但是这种可能性不大。因为这一方面会使得库函数在多线程环境下不可重入,另一方面也会增大库文件的体积)。然而,在我们调用Now函数之后,我们也没有用free之类的函数释放指针指向的存储空间。
那么,
1. 这样是否会造成内存泄露?
2. Now函数返回的指针(实质上是调用C库函数localtime返回的指针)是否是由libc自动管理的,因而不需要我们显式释放这部分空间?