2016-06-21 19 views
1

Ich benutzte localtime auf meinem BeagleBone Black, um Ereignisse zu stempeln. Ich führe eine Multithread-Anwendung aus und stelle fest, dass Localtime nicht Thread-sicher ist. Also wechselte ich zu localtime_r und dies erzeugt einen Segmentierungsfehler. Anbei finden Sie das Bild.Wie löst man localtime_r Zeitzonensegmentierung Fehler?

enter image description here

  • ausgeführt ich das gleiche Programm auf meinem Desktop, das x86_64-System mit einer anderen Linux-Kernel-Version ist und es funktioniert. Versucht es erneut mit einem anderen 64-Bit-System mit einem neueren Kernel und es funktioniert nicht.
  • Nicht viele Literatur zu diesem Thema online gefunden. This hat einige Informationen, ist aber nicht klar.

Irgendwelche Vorschläge, wie ich das lösen kann? Nicht sicher, warum es auf einigen Systemen und nicht auf anderen Systemen funktioniert.

Update 1: Ich habe den Code geschrieben

#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

wäre besser, wenn Sie Ihren Code hier posten könnte. – sas

+0

Hat den Code veröffentlicht. – am3

Antwort

3
struct tm *result; 
struct tm *tm = localtime_r(&t, result); 

Sie bestanden Müll localtime_r. Sie haben result nicht speziell initialisiert, aber den Wert an localtime_r übergeben.

Vielleicht wollte man:

time_t t = time(NULL); 
struct tm result; 
struct tm *tm = localtime_r(&t, &result); 
+0

sollte das localtime_r sein (& t'm', & result); ? – Mawg

+0

Danke. Ich habe ein ähnliches Problem. Ich habe deine Antwort gesehen, aber nicht bemerkt "time_t t = time (NULL);" in der ursprünglichen Frage – Mawg

+0

Ich habe hinzugefügt, dass Ihre Antwort, so können wir diese Kommentare jetzt löschen :-) – Mawg

2

Seg Fehler auftritt, wie Sie auf einen Speicher zuzugreifen versuchen, die Sie nicht besitzen.
verwenden

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

Sie sind sicher richtig .. korrigiert .. Vielen Dank – sas