c - 为什么我的 pthread_t 指针数组会导致 pthread_create 出现段错误,但对数组中 pthread_t 的引用却没有
问题描述
我想将pthread_t
's 存储在这样的数组中:
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_t tThreads[nThreads]
,您可以定义一个直接包含pthread_t
-objects 的数组。您可以将每个此类有效对象的(地址)传递给pthread_create
.
pthread_t* tThreads[nThreads]
相比之下,您定义了一个指向 -objects 的指针数组,而不是-objectspthread_t
本身pthread_t
。传递这样一个(未初始化的)指针(指向“某处”但不指向有效的pthread_t
对象)pthread_create
将产生未定义的行为(例如段错误)。tThreads[i] = malloc(sizeof(pthread_t))
每次通话之前您都需要一个。
推荐阅读
- html - iOS webapp - 如何在页面之间保持全屏模式
- angular - 将数据传递给 Angular 9 中的指令
- firebase - 我应该如何在颤动中访问通知有效负载的数据元素?
- php - Laravel model::create() 不返回主键
- reactjs - 钩子 React Native 和 Webview + Splash Screen Animate 的问题
- python - 如何修复 Python 内部函数定义中的无效语法错误?
- r - 在行/网格中绘制多个未使用 ggplot 创建的图
- python - 在 Python 中安排工作
- javascript - 升级到预编译的 Handlebars 4.7.6 模板无法呈现
- laravel - 传单多个标记json