我在BeagleBone Black上使用 localtime 为活动加时间戳。我正在运行一个多线程应用程序,并意识到本地时间不是线程安全的。所以我切换到 localtime_r ,这会产生分段错误。请附上图片。
有关如何解决此问题的任何建议?不确定为什么它适用于某些系统而不适用于其他系统。
更新1:我已发布代码
#include <stdio.h>
#include <string.h>
#include <time.h>
#include <stdlib.h>
#include <stdbool.h>
int main(){
int day, month, hour, minute, second, year;
time_t t = time(NULL);
struct tm *result;
struct tm *tm = localtime_r(&t, result);
day = result->tm_mday;
month = (result->tm_mon+1);
hour = result->tm_hour;
minute = result->tm_min;
second = result->tm_sec;
year = (result->tm_year-100);
printf("%d : %d : %d : %d:%d:%d\n", month, day, year, hour, minute, second);
return 0;
}
答案 0 :(得分:3)
struct tm *result;
struct tm *tm = localtime_r(&t, result);
您将垃圾传递给localtime_r
。您没有将result
初始化为任何特定内容,而是将其值传递给localtime_r
。
也许你想要:
time_t t = time(NULL);
struct tm result;
struct tm *tm = localtime_r(&t, &result);
答案 1 :(得分:2)
当您尝试访问不属于您的内存时,会发生Seg故障 使用此
//struct tm *result ;
struct tm result;
struct tm *tm = localtime_r(&t, &result);