C语言中ctime()和loacaltime()使用中遇到的问题
2021-01-29 20:25
标签:time 释放 linu 编程 文件的 空间 div date src 近期在学习Linux C编程,在使用 localtime() 函数时遇到了比较奇怪的问题,我本想对比文件的最近修改时间和系统当前时间年份是否一致,按说定义两个struct tm*类型指针,再获取到两个struct tm *类型的指针变量后进行比较便可,但是无奈这两个结构体指向的tm_year成员值是一样的,那么只能猜想到其实 localtime() 函数返回的的指针其实是指向内存中同一个地址,输出两个指针也验证了我的猜想是正确的。 然后查看文档发现事情就是这样的,查看了Linux man手册,看到如下关键信息:
Too young! Too naive! 也就是说 localtime() 函数返回了一个静态变量的地址(至于是静态局部变量还是静态全局变量便不从得知了),在同一个程序中,对于多次不同调用,localtime() 只是重新覆盖了这个静态变量的值而已,自然返回的指针便指向内存中相同的物理地址,通过两个指针变量访问到的也就是同一个结构体变量。 如果想要完成对比两个日期的年份是否一致,通过以下代码便可以办到: date1 和 date2 为两个time_t类型的变量,通过内存拷贝函数 memcpy(), 拷贝localtime() 函数返回的静态变量中所有的值到我们自己在堆(heap)上动态申请的空间上即可。 使用完记得手动释放申请的内存空间。 也可以定义局部变量,保存想要比较的成员变量的值后,再次执行 localtime() 函数,比较相应的成员变量即可。 如果不清楚以上的信息,还会产生另外一个疑问,那就是我们需要释放ctime() 和localtime() 函数返回的指针指向的内存吗? 现在也得到了答案:不用,并且造成内存泄漏的风险。 C语言中ctime()和loacaltime()使用中遇到的问题 标签:time 释放 linu 编程 文件的 空间 div date src 原文地址:https://www.cnblogs.com/HyattXia/p/12822497.htmlstruct tm* ptr1, *ptr2;
ptr1 = (struct tm*)malloc(sizeof(struct tm));
ptr2 = (struct tm*)malloc(sizeof(struct tm));
memcpy(ptr1, localtime(&date1), sizeof(struct tm));
memcpy(ptr2, localtime(&date2), sizeof(struct tm));
free(ptr1);
ptr1 = NULL;
free(ptr2);
ptr2 = NULL;
文章标题:C语言中ctime()和loacaltime()使用中遇到的问题
文章链接:http://soscw.com/index.php/essay/48838.html