gpt4 book ai didi

c - 为什么这段代码会触发段错误?

转载 作者:行者123 更新时间:2023-12-02 08:44:05 25 4
gpt4 key购买 nike

我收到以下代码的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;
}

最佳答案

问题出在下面的代码上

int *g;
....
*g=i+j;

g 是一个未初始化的指针。当您取消引用它时,您正在尝试写入内存中未定义的位置。其影响是不确定的,但很可能出现段错误。

有很多方法可以解决这个问题,包括

  • g分配内存
  • g指向一些已分配的内存
  • main 的堆栈上声明 g 并将指向它的指针传递给您的子线程

关于c - 为什么这段代码会触发段错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13876883/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com