我得到Segmentation Fault
以下代码很奇怪因为我没有看到我在哪里访问未初始化的内存。我试图调试代码,发现这个分段错误与线程过程中的*g
有关。这是代码:
void *Func(void *arg);
int main()
{
pthread_t tid;
void *x;
pthread_create(&tid,NULL,Func,NULL);
pthread_join(tid,&x);
int i=*(int *)x;
printf("Data returned from the thread %d\n",i);
return 0;
}
void *Func(void *arg)
{
int *g;
int i=2,j=3;
printf("inside thread\n");
*g=i+j;
printf("%d\n",*g);
return g;
}
答案 0 :(得分:3)
问题在于以下代码
int *g;
....
*g=i+j;
g
是一个未初始化的指针。当您取消引用它时,您正在尝试写入内存中未定义的位置。这种影响是不明确的,但很可能是一个段错误。
您可以通过多种方式解决此问题,包括
g
g
g
中的堆栈上声明main
并将指针传递给您的子线程答案 1 :(得分:2)
int *g;
g中的是未分配的位置地址,您尝试在该位置分配。
这样做:
int *g=calloc(1, sizeof(int)) ;
另外不要忘记free
记忆。
答案 2 :(得分:1)
你在做:
int *g;
...
*g=i+j;
g
是一个未初始化的指针,您正在尝试写入它指向的位置,这会导致未定义的行为。