localtime() 在 c 中因分段错误而崩溃

2024-01-13

追踪这个问题的原因有点困难。

这是代码位:

    #include <time.h>
time_t now;
struct tm *mytime;
char yyyy[5];
char mm[3];
char dd[3];
char mname[10];
if(time(&now)!=(time_t)(-1))
{
    mytime=localtime(&now);
    strftime(yyyy, sizeof(yyyy), "%Y", mytime);
    strftime(mm, sizeof(mm), "%m", mytime);
    strftime(dd, sizeof(dd), "%d", mytime);
    strftime(mname, sizeof(mname), "%B", mytime);
}

它崩溃了localtime line:

Segmentation fault (core dumped)

有任何想法吗?


示例代码对我来说运行良好。发布你的完整代码?或者将您的示例减少到尽可能少,但仍然会重现问题。并在核心“gdb -c a.core a.out”上运行 gdb 并获取回溯(bt)。

本地时间的一个问题是返回的指针是指向静态全局变量的指针,并且对本地时间的后续调用会更新该变量。很久很久以前就曾绊倒过我一次。

struct tm *localtime(const time_t *time)

返回值是指向静态分解时间结构的指针,该结构可能会被对任何日期和时间函数的后续调用所覆盖。 (但没有其他库函数会覆盖该对象的内容。)

From: http://www.chemie.fu-berlin.de/chemnet/use/info/libc/libc_17.html http://www.chemie.fu-berlin.de/chemnet/use/info/libc/libc_17.html

关于搜索核心文件:

也可以看看核心转储 - 但核心文件不在当前目录中? https://stackoverflow.com/questions/2065912/core-dumped-but-core-file-is-not-in-current-directory

确保系统可以写入核心文件。
* 对我来说,在 ununtu 系统的一个示例中 ulimit -c 显示 0 *

ulimit -c unlimited

检查使用的模式并将该模式​​更改为简单的一个或不同的位置。

cat /proc/sys/kernel/core_pattern
#sysctl -w kernel.core_pattern=core

搜索一些常见位置并查看 /var/log/messages:

ls /var/crash /var/cache/abrt /var/spool/abrt/ /tmp/*core*
tail /var/log/messages

在 ubuntu 上检查 apport 服务配置和 init/rcfiles:

find /etc/ |grep appo
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

localtime() 在 c 中因分段错误而崩溃 的相关文章

随机推荐