0

我在 pthread 内的以下代码块上收到“Segmentation Fault 11”:

void *func(void *len){
    char *temp = len;
    size = (int) strtol(temp, (char **)NULL, 10); // this throws the segfault
}

pthread create 的写法如下:

int main(int argc, const char *argv[]){
    pthread_t t0;
    const char * length = argv[1];

    pthread_create(&t0, NULL, &func, (void *)length);
    // rest of code
    ...
}

令我困惑的是,SegFault 在编译并在终端中运行时被抛出,而不是在 Xcode 中。关于它为什么被抛出的任何想法?

4

1 回答 1

5

除非您等待线程,否则可能会在甚至执行main()之前退出(因此无效,因为它超出了那里的范围)。我的猜测是,这是在调试器中运行时消除的竞争条件,这就是为什么“在 Xcode”中运行它(重要的不是 IDE,而是正在调试进程的事实)会有所帮助。func()argv

于 2013-04-15T19:40:50.317 回答