繁体   English   中英

我在 C 中制作一个简单的 pthreads 程序时遇到分段错误,我不明白为什么

[英]I get segmentation fault while making a simple pthreads program in C and I don't understand why

这个简单的代码编译得很好,但是当我使用pthread_join(t1, NULL)它返回分段错误(核心转储)

int number = 0;

void* change_number(void *x){
    printf("helo from some thread\n");
        int num = *(int *)x;
        printf("%d\n", number);
        number += num;
    
        printf("a thread increased the variable by %d\n", num);
    }

int main(int argc, char* argv[])
{

        pthread_t t1;
        pthread_t t2;
        printf("1) SUccess code: %d\n", pthread_create(&t1, NULL, change_number, (void *) 5));
        printf("2) Success code: %d\n", pthread_create(&t2, NULL, change_number, (void *) 11));
        printf("%d\n",pthread_join(t1, NULL));
        printf("thread 1 finished\n");
        pthread_join(t2, NULL);

}

这里有什么问题? 如果它有任何相关性,我会在 VM 中运行它

(void*)5表示将5视为指针,您似乎想要的是指向包含5 的int变量的指针。

正如其他人所指出的,您的问题出在(void *) 5中,这很容易解决:

int foo = 5, bar = 11;

printf("1) SUccess code: %d\n", pthread_create(&t1, NULL, change_number, (void *) &foo));
printf("2) Success code: %d\n", pthread_create(&t2, NULL, change_number, (void *) &bar));

如前所述,您应该将foobar变量设为全局变量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM