#include "time.h"
#include "stdio.h"
int main(void)
{
struct tm *local;
time_t t;
t=time(NUL);
local=localtime(&t);
printf("Local hour is: %d\n",local->tm_hour);
local=gmtime(&t);
printf("UTC hour is: %d\n",local->tm_hour);
return 0;
}
这是网上的一段代码,我想问的是:local是一个指针,本身并没有分配内存,localtime(&t)返回一个指针类型,那么local指向的那块内存应该是由localtime函数内部分配的吧?那么这块内存没有人来负责释放,岂不是有内存泄漏?
请教C语言中的一个日期函数问题(已解决)
-
- 帖子: 207
- 注册时间: 2006-10-24 10:37
- 联系:
请教C语言中的一个日期函数问题(已解决)
上次由 brucezhao 在 2009-08-14 15:03,总共编辑 1 次。
- windwhinny
- 帖子: 618
- 注册时间: 2007-09-26 17:34
Re: 请教C语言中的一个日期函数问题
程序退出,系统自然会释放程序的内存
-
- 帖子: 207
- 注册时间: 2006-10-24 10:37
- 联系:
Re: 请教C语言中的一个日期函数问题
楼上的想法太随意了,如果写一个7*24小时的服务程序,如果有内存泄漏是很可怕的事情。
我找到了localtime的源码,它是在内部定义了一个静态变量,所以能够返回地址,而且也不会重复多次分配内存,所以这段代码没有问题。
我找到了localtime的源码,它是在内部定义了一个静态变量,所以能够返回地址,而且也不会重复多次分配内存,所以这段代码没有问题。
- BigSnake.NET
- 帖子: 12522
- 注册时间: 2006-07-02 11:16
- 来自: 廣州
- 联系:
Re: 请教C语言中的一个日期函数问题
不一定是静态brucezhao 写了:楼上的想法太随意了,如果写一个7*24小时的服务程序,如果有内存泄漏是很可怕的事情。
我找到了localtime的源码,它是在内部定义了一个静态变量,所以能够返回地址,而且也不会重复多次分配内存,所以这段代码没有问题。
这类函数一般遵循谁分配谁释放的原则, 除非特别说明, 不用担心这类事情. 就是说当他是静态分配就行了
^_^ ~~~
要理解递归,首先要理解递归。
地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。
要理解递归,首先要理解递归。
地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。
- comfanter
- 帖子: 190
- 注册时间: 2009-05-02 14:51
Re: 请教C语言中的一个日期函数问题
1、内存泄漏是表示运行中的进程使用了new,malloc在heap上分配了内存,但在内存使用完成后没有释放,而且没有指针再指向这块内存,这块内存在当前进程中永远无法再使用或释放。
2、内存泄漏只对一个运行中进程有效,如果进程运行结束,操作系统会把这个进程所有内存释放掉,当然也包括泄漏了的内存。
3、如果一个程序只运行很短的时间,有少量的内存泄漏没有关系,因为进程一结束,进程占用的所有的内存都释放掉了。如果是长期运行的程序,特别是服务器程序,绝不能有内存泄漏。
4、内存泄漏不一定只指内存没有释放,其实程序能申请的所有资源如socket、锁、文件句柄,数据库连接等如果没有合法释放,长期运行中都会有问题,而且泄漏这些资源很多都会表现为内存被大量占用。
2、内存泄漏只对一个运行中进程有效,如果进程运行结束,操作系统会把这个进程所有内存释放掉,当然也包括泄漏了的内存。
3、如果一个程序只运行很短的时间,有少量的内存泄漏没有关系,因为进程一结束,进程占用的所有的内存都释放掉了。如果是长期运行的程序,特别是服务器程序,绝不能有内存泄漏。
4、内存泄漏不一定只指内存没有释放,其实程序能申请的所有资源如socket、锁、文件句柄,数据库连接等如果没有合法释放,长期运行中都会有问题,而且泄漏这些资源很多都会表现为内存被大量占用。
- linjiework
- 帖子: 240
- 注册时间: 2009-07-07 19:52
Re: 请教C语言中的一个日期函数问题
BigSnake.NET 写了:不一定是静态brucezhao 写了:楼上的想法太随意了,如果写一个7*24小时的服务程序,如果有内存泄漏是很可怕的事情。
我找到了localtime的源码,它是在内部定义了一个静态变量,所以能够返回地址,而且也不会重复多次分配内存,所以这段代码没有问题。
这类函数一般遵循谁分配谁释放的原则, 除非特别说明, 不用担心这类事情. 就是说当他是静态分配就行了
你这种说法不对。在标准 C 里,没有人会替你做类似释放内存这样的动作,它和类是不同的。凡是在说明文档里说是静态变量的,就一定是静态的。否则如何释放?不要告诉我程序会自动释放。
谁分配谁释放的原则这个说法没错,但用来说明 localtime 这个函数就不妥当了。
阿呆 : 天下第一呆!
- BigSnake.NET
- 帖子: 12522
- 注册时间: 2006-07-02 11:16
- 来自: 廣州
- 联系:
Re: 请教C语言中的一个日期函数问题
考虑这样一种情况, 返回的指针指向一个缓冲区, 那么这个用静态分配还是动态分配好? 静态分配的话要分配多大呢?linjiework 写了:BigSnake.NET 写了:不一定是静态brucezhao 写了:楼上的想法太随意了,如果写一个7*24小时的服务程序,如果有内存泄漏是很可怕的事情。
我找到了localtime的源码,它是在内部定义了一个静态变量,所以能够返回地址,而且也不会重复多次分配内存,所以这段代码没有问题。
这类函数一般遵循谁分配谁释放的原则, 除非特别说明, 不用担心这类事情. 就是说当他是静态分配就行了
你这种说法不对。在标准 C 里,没有人会替你做类似释放内存这样的动作,它和类是不同的。凡是在说明文档里说是静态变量的,就一定是静态的。否则如何释放?不要告诉我程序会自动释放。
谁分配谁释放的原则这个说法没错,但用来说明 localtime 这个函数就不妥当了。
所以我最初看二楼回答的时候我是没有说他错的, 只要在每次重新分配时把之前的释放掉, 尽管有一块在程序退出时没有释放, 问题是不大的
^_^ ~~~
要理解递归,首先要理解递归。
地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。
要理解递归,首先要理解递归。
地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。
- linjiework
- 帖子: 240
- 注册时间: 2009-07-07 19:52
Re: 请教C语言中的一个日期函数问题
BigSnake.NET 写了:考虑这样一种情况, 返回的指针指向一个缓冲区, 那么这个用静态分配还是动态分配好? 静态分配的话要分配多大呢?linjiework 写了:BigSnake.NET 写了:不一定是静态brucezhao 写了:楼上的想法太随意了,如果写一个7*24小时的服务程序,如果有内存泄漏是很可怕的事情。
我找到了localtime的源码,它是在内部定义了一个静态变量,所以能够返回地址,而且也不会重复多次分配内存,所以这段代码没有问题。
这类函数一般遵循谁分配谁释放的原则, 除非特别说明, 不用担心这类事情. 就是说当他是静态分配就行了
你这种说法不对。在标准 C 里,没有人会替你做类似释放内存这样的动作,它和类是不同的。凡是在说明文档里说是静态变量的,就一定是静态的。否则如何释放?不要告诉我程序会自动释放。
谁分配谁释放的原则这个说法没错,但用来说明 localtime 这个函数就不妥当了。
所以我最初看二楼回答的时候我是没有说他错的, 只要在每次重新分配时把之前的释放掉, 尽管有一块在程序退出时没有释放, 问题是不大的
你的想法不对,作为一个标准的,大家都在使用的函数,如果大家都像你这样想,这个函数泄露一点内存,另外一个函数泄露一点内存,那最后用户还怎么敢使用这个库?
而且如果是静态分配的,对程序并没有啥影响啊。在不产生内存泄露,又不增加系统复杂度的情况下,这是一种可选方案。(虽然我觉得这样做并不是最好方法)
我觉得写程序一定要尽量严谨,否则如果做个大项目,你会痛苦不已。
阿呆 : 天下第一呆!