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