0

我有一个程序启动一个 pthread,然后在它返回之前等待这个线程的终止。代码类似于:

int main(int32_t argc, char* argv[]) {
  pthread_t t;
  /* initialization and other stuff 
     ... 
  */
  printf("join result:%d\n", pthread_join(t, 0));
  return 0;
}

该程序按预期打印:join result: 0. 所以连接有效,t完成。尽管如此,程序并没有停止执行。如果我在该行exit(0)之前插入一个命令(或其他数字),我只能强制它停止。return 0

但是,如果我删除pthread_join调用的行,程序将完美退出。

这怎么可能?在所有子线程加入后,什么可以阻止程序完成执行?

编辑:我刚刚发现 gdb 告诉我在执行最后一行后出现分段错误}。尽管如此,我不知道幕后发生了什么:

Program received signal SIGSEGV, Segmentation fault.
0x000000060003aa10 in ?? ()
4

1 回答 1

0

我认为主线程中可能发生堆栈损坏。从windows我知道在执行main之前,exit_process函数的地址被压入堆栈。然后 return 0 执行一个 exit_process 调用。如果在您的情况下堆栈已损坏,则指向 exit_process 的指针可能被替换为无效指针。

于 2014-06-22T06:51:57.363 回答