我不明白为什么以下伪代码会导致段错误。
使用 pthreads 运行函数我遇到了 SEGFAULT,将整数初始化为零。
当my_threaded_function
不在线程上下文中或者如果我从主线程调用函数时没有问题。
rc=0;
SEGFAULT仅在函数内部初始化 bu时不会发生maze_init
。
我已确认我的堆栈空间不足。但我想不出是什么导致函数在 pthread 内部表现不同(不涉及共享内存),&aa
无法根据 gdb 访问该地址。
为什么堆栈变量的地址不在堆栈上?
int maze_init(Maze*m, char* filename)
{
FILE *fp;
int aa, bb, rc;
aa = 0; /// SEGFAULT HERE
...
return 1;
}
void* my_threaded_function(void* arg)
{
Maze maze;
int rc;
rc = 0;
rc = maze_init(&maze,"test.txt");
return rc;
pthread_exit((void*)1);
}
int main(int argc,char** argv){
pthread_t t;
pthread_create(&t, NULL, my_threaded_function,(void*)0);
sleep(10);
}
- 编辑(固定代码错字
return rc
)