这段代码是否存在内存泄漏问题?

5

I have this code:

 int tim=10000; // some random number
 tm *now=localtime(&tim);
 printf("Date is %d/%02d/%02d\n", now->tm_year+1900, now->tm_mon+1, now->tm_mday);
 printf("Time is %02d:%02d\n", now->tm_hour, now->tm_min);

我在想这段代码是否存在内存泄漏的原因是 localtime 返回一个指向结构体的指针,这意味着它会分配内存,但是没有人释放它。

这段代码是否存在内存泄漏?


1
你能向我们展示localtime中发生了什么吗? - Cory Kramer
你应该使用 time_t 而不是整数。 - Marco A.
1
这个函数很危险。它使用了静态变量,这意味着它不是线程安全的。 - Jason Hu
1
@mans,你在有趣的部分开始时停止阅读了。在许多架构上可能是int,但这并不保证,因此最好使用标准化类型。 - Jens Gustedt
1
尝试切换到struct tm * localtime_r(time_t * tim, struct tm * output) - Wolf
显示剩余2条评论
1个回答

10

您不需要(也不应该)显式释放任何东西,因为localtime返回一个指向静态对象的指针。

C标准如下:

(C11、7.27.3时间转换函数p1)“除了strftime函数外,这些函数每个都返回一个指向两种类型静态对象之一的指针:一个分解的时间结构或一个char数组。”

而根据POSIX.1-2008文档,

asctime()、ctime()、gmtime()和localtime()函数将在两个静态对象中返回值:一个被打散的时间结构和一个char类型的数组。任何一个函数的执行都可能覆盖由其他函数返回的这些对象中的信息。


你的措辞“没有必要”听起来相当危险,我认为释放可能会导致问题。 - Wolf
@Wolf 我修改了措辞 - ouah

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接