Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何解决本地时区分割错误?_C_Linux_Multithreading_Beagleboneblack_Localtime - Fatal编程技术网

C 如何解决本地时区分割错误?

C 如何解决本地时区分割错误?,c,linux,multithreading,beagleboneblack,localtime,C,Linux,Multithreading,Beagleboneblack,Localtime,我在BeagleBone Black上使用localtime来标记事件。我正在运行一个多线程应用程序,并意识到localtime不是线程安全的。所以我切换到localtime\r,这会产生一个分段错误。请查看附件中的图片 我在我的桌面上执行了相同的程序,它是x86_64系统,具有不同的linux内核版本,并且可以正常工作。用另一个64位系统和更新的内核再次尝试,但不起作用。 没有在网上找到很多关于这个问题的文献。有一些信息,但不清楚。 关于我如何解决这个问题有什么建议吗?不确定为什么它在某些系统

我在BeagleBone Black上使用localtime来标记事件。我正在运行一个多线程应用程序,并意识到localtime不是线程安全的。所以我切换到localtime\r,这会产生一个分段错误。请查看附件中的图片

我在我的桌面上执行了相同的程序,它是x86_64系统,具有不同的linux内核版本,并且可以正常工作。用另一个64位系统和更新的内核再次尝试,但不起作用。 没有在网上找到很多关于这个问题的文献。有一些信息,但不清楚。 关于我如何解决这个问题有什么建议吗?不确定为什么它在某些系统上有效,而在其他系统上无效

更新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;
}
您已将垃圾传递到localtime\r。您没有将结果初始化为任何特定的值,而是将其值传递给localtime\r

也许你想要:

time_t t = time(NULL);
struct tm result;
struct tm *tm = localtime_r(&t, &result);
您已将垃圾传递到localtime\r。您没有将结果初始化为任何特定的值,而是将其值传递给localtime\r

也许你想要:

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

Seg故障发生在您试图访问不属于您的内存时。 用这个


Seg故障发生在您试图访问不属于您的内存时。 用这个


如果你能在这里发布你的代码会更好。如果你能在这里发布你的代码会更好。那应该是localtime_r&tm,&result?谢谢我也遇到了类似的问题。我看到了你的答案,但没有注意到time\t t=timeNULL;在原始问题中,我添加了您的答案,因此我们现在可以删除这些评论:-应该是localtime_r&tm,&result?谢谢我也遇到了类似的问题。我看到了你的答案,但没有注意到time\t t=timeNULL;在原始问题中,我添加了您的答案,因此我们现在可以删除这些评论:-
//struct tm *result ;
struct tm result;
struct tm *tm = localtime_r(&t, &result);