c - 使用 pthread_create 出现分段错误
问题描述
我目前正在与分段错误作斗争。
我有一个函数,它接受一些参数并将它们插入到结构的元素中,然后使用pthread_create
. 然后在 struct 函数中使用该结构为变量赋值。执行上述操作的代码如下所示:
void create_monsters(int monster_id, unsigned char x_coord, unsigned char y_coord,
unsigned char monster_type )
{
properties *prop;
prop = (properties*)malloc(sizeof (properties));
prop->x_coord = x_coord;
prop->y_coord = y_coord;
prop->monster_type = monster_type;
pthread_create(&monster_tid[monster_id], NULL, monster, &prop);
}
线程函数如下所示:
void *monsters(void* props)
{
properties *pptr = (properties *) props;
unsigned char x_coord = pptr->x_coord;
unsigned char y_coord = pptr->y_coord;
unsigned char monstor_type = pptr->monster_type;
...
在此之后,仅使用上述 unsigned char 变量。
我也试过
properties prop;
p.x_coord = x_coord;
p.y_coord = y_coord;
p.monster_type = monster_type;
malloc
我总是遇到分段错误,我不明白为什么,也不知道如何解决它,而不是那种方法无效。
有人建议我使用深拷贝,但我认为我将它与 malloc 一起使用。
谢谢您的帮助
解决方案
Pass prop
,它已经是一个指针( P*
),而不是&prop
( P**
):
P* prop = mallocIsFine();
pthread_create(.., NULL, monster, prop);
线程函数错误地尝试访问原始代码中的P**
a :P*
P *pptr = (P *) props; // props refers to a P**, oops!
推荐阅读
- ruby - 我正在尝试在 mac 终端上使用命令 gem install rake 安装 rake,但我不断收到此错误
- python - Plotly:如何使用 plotly express 自定义 xaxis 刻度标签?
- angular - ngIf 不会在更新 [(ngModel)] 变量时触发
- ios - 为什么矢量化 PDF 图像具有分辨率属性
- terraform - 添加 SSL 证书时出错 - 使用 Terraform 模块
- html - 网格显示图像,同时尽可能少地扭曲尺寸
- go - 范围使用是否需要通道容量?
- python - 如何标记.parametrize() 一个 Pytest 夹具
- html - 如何在 CSS 中设置我想要的背景透明度?
- azure-integration-runtime - AzureDataFactory 管道中的自托管集成运行时不可用