gpt4 book ai didi

c - 为什么我的 pthread_t 指针数组会在 pthread_create 上导致段错误,但对数组中 pthread_t 的引用不会

转载 作者:太空宇宙 更新时间:2023-11-04 07:50:07 26 4
gpt4 key购买 nike

我想像这样将 pthread_t 存储在数组中:

pthread_t tThreads[nThreads];

不久之后,我使用 for 循环遍历数组以启动线程

pthread_create( &tThreads[i], NULL, &fn, (void*) NULL);

我注意到我正在创建一个 pthread_t 数组,使用特定索引处的 pthread_t 对象,然后传递对该 pthread_t 的引用> 开始一个线程。为了让自己变得聪明并减少冗长,我将 tThreads 更改为 pthread_t 引用数组

pthread_t* tThreads[nThreads];

这样我就可以像这样创建线程

pthread_create( tThreads[i], NULL, &fn, (void*) NULL);

问题是第二种方法在尝试创建 pthread 时会产生段错误。是什么原因造成的?

最佳答案

使用 pthread_tThreads[nThreads],您可以定义一个直接包含 pthread_t 对象的数组。您可以将每个此类有效对象的(地址)传递给 pthread_create

pthread_t* tThreads[nThreads] 相比,您定义了一个指针数组到 pthread_t - 对象而不是 pthread_t - 对象本身。将这样一个(未初始化的)指针(指向“某处”但不是指向有效的 pthread_t 对象)传递给 pthread_create 将产生未定义的行为(例如段错误)。在每次调用之前,您需要一个 tThreads[i] = malloc(sizeof(pthread_t))

关于c - 为什么我的 pthread_t 指针数组会在 pthread_create 上导致段错误,但对数组中 pthread_t 的引用不会,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54374304/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com