linux pthread join,c-pthread_join中的段错误

我有一个相当简单的C代码:

#include

#include

#include

void* run(void *arg) {

printf("hello from %d!

", *(int*)arg);

pthread_exit(NULL);

}

int main() {

int ids[4];

pthread_t threads[4];

for (int i = 0; i < 4; i++) {

ids[i] = i;

printf("create thread %d

", i);

threads[i] = pthread_create(&threads[i], NULL, run, (void*)&ids[i]);

}

for (int i = 0; i < 4; i++) {

printf("waiting for %d to join...

", i);

pthread_join(threads[i], NULL);

printf("thread %d joined

", i);

}

pthread_exit(NULL);

return 0;

}

我用它编译

$gcc -pthread -g -o main main.c

我的输出是

$./main

create thread 0

create thread 1

create thread 2

create thread 3

waiting for 0 to join...

hello from 0!

zsh: segmentation fault (core dumped) ./main

如您所见,它存在段错误. gdb告诉我没有什么有用的:

$gdb ./main

GNU gdb (GDB) 7.11

Copyright (C) 2016 Free Software Foundation, Inc.

License GPLv3+: GNU GPL version 3 or later

This is free software: you are free to change and redistribute it.

There is NO WARRANTY, to the extent permitted by law. Type "show copying"

and "show warranty" for details.

This GDB was configured as "x86_64-pc-linux-gnu".

Type "show configuration" for configuration details.

For bug reporting instructions, please see:

.

Find the GDB manual and other documentation resources online at:

.

For help, type "help".

Type "apropos word" to search for commands related to "word"...

Reading symbols from ./main...done.

(gdb) r

Starting program: /home/picard/projects/bme/pp-lab/sudoku/main

[Thread debugging using libthread_db enabled]

Using host libthread_db library "/usr/lib/libthread_db.so.1".

create thread 0

[New Thread 0x7ffff781a700 (LWP 9660)]

hello from 0!

create thread 1

[New Thread 0x7ffff7019700 (LWP 9661)]

create thread 2

hello from 1!

[New Thread 0x7ffff6818700 (LWP 9662)]

create thread 3

hello from 2!

[New Thread 0x7ffff6017700 (LWP 9663)]

hello from 3!

waiting for 0 to join...

Thread 1 "main" received signal SIGSEGV, Segmentation fault.

0x00007ffff7bc45e0 in pthread_join () from /usr/lib/libpthread.so.0

(gdb) bt

#0 0x00007ffff7bc45e0 in pthread_join () from /usr/lib/libpthread.so.0

#1 0x0000000000400786 in main () at main_old.c:22

以下是有关我的系统的一些信息:

$gcc --version

gcc (GCC) 5.3.0

$uname -a

Linux enterprise 4.4.5-1-ARCH #1 SMP PREEMPT Thu Mar 10 07:38:19 CET 2016 x86_64 GNU/Linux

我应该如何继续调试此问题?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值