2016-06-21 5 views
1

Я использовал по местному времени на моем BeagleBone Black на время штампа событий. Я запускаю многопоточное приложение и понял, что localtime не является потокобезопасным. Поэтому я переключился на localtime_r, и это вызывает ошибку сегментации . Пожалуйста, прикрепите изображение.Как решить локальную ошибку сегментации localtime_r?

enter image description here

  • я выполнил ту же программу на моем рабочем столе, который система x86_64 с другой версией ядра Linux, и она работает. Попробовал снова с другой 64-разрядной системой с более новым ядром, и это не сработает.
  • Не нашли много публикаций в Интернете по этой проблеме. This имеет некоторую информацию, но не ясен.

Любые предложения по тому, как я могу это решить? Не уверен, почему он работает на некоторых системах, а не на других.

Update 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; 
} 
+1

Было бы лучше, если бы вы могли бы разместить свой код здесь. – sas

+0

Написал код. – am3

ответ

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); 
+0

должно быть localtime_r (& t'm', & result); ? – Mawg

+0

Спасибо. У меня такая же проблема. Я видел ваш ответ, но не заметил 'time_t t = time (NULL);' в исходном вопросе – Mawg

+0

Я добавил, что ваш ответ, поэтому мы можем удалить эти комментарии сейчас :-) – Mawg

2

вина Seg происходит, как вы пытаетесь получить доступ к памяти, которые вы не имеете.
Используйте этот

//struct tm *result ; 
struct tm result; 
struct tm *tm = localtime_r(&t, &result); 
+0

Вы, безусловно, правы .. исправлены .. благодаря – sas