如何解决localtime_r时区分段错误?

时间:2016-06-21 03:36:45

标签: c linux multithreading beagleboneblack localtime

我在BeagleBone Black上使用 localtime 为活动加时间戳。我正在运行一个多线程应用程序,并意识到本地时间不是线程安全的。所以我切换到 localtime_r ,这会产生分段错误。请附上图片。

enter image description here

  • 我在我的桌面上执行了相同的程序,该程序是x86_64系统,具有不同的Linux内核版本,并且可以正常运行。用另一个带有更新内核的64位系统再次尝试它并且它不起作用。
  • 在网上找不到很多关于这个问题的文献。 This有一些信息,但不清楚。

有关如何解决此问题的任何建议?不确定为什么它适用于某些系统而不适用于其他系统。

更新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;
}

2 个答案:

答案 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);