【发布时间】:2019-04-12 13:28:59
【问题描述】:
我正在使用 PThreads 在 C 中创建一个线程,该线程执行一个在无限循环中运行的函数,并每秒将一些随机 json 字符串打印到控制台中。一开始他打印函数模拟LED的结果没有问题,但在休眠1秒后,我会得到一个分段错误(核心转储)。如果我删除睡眠,我不会得到它并且程序运行正常。为什么我在睡眠时会出现分段错误以及如何解决?
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
char *simulateLED() {
int temp;
int luftf;
char* jsonString;
time_t t;
srand((unsigned) time(&t));
int x=-10, y=50;
temp=(rand()%((y+1)-x))+x;
x=2, y=30;
luftf=(rand()%((y+1)-x))+x;
printf("%d %d\n", temp, luftf);
fflush(stdout);
sprintf(jsonString, "{\n\"TEMP\": %d,\n\"HUMI\": %d\n}", temp, luftf);
return jsonString;
}
void *simAndSendThread(void *param) {
while(1) {
printf("%s", simulateLED());
sleep(1);
}
}
int main(int argc, char *argv[]) {
pthread_t thread;
if(pthread_create(&thread, NULL, simAndSendThread, NULL)) {
fprintf(stderr, "Error creating thread\n");
return 1;
}
if(pthread_join(thread, NULL)) {
fprintf(stderr, "Error joining thread\n");
return 2;
}
pthread_exit(NULL);
return 0;
}
【问题讨论】:
-
您永远不会为
jsonString赋值。你将它的垃圾值传递给sprintf,这可不好。
标签: c segmentation-fault pthreads sleep