首页 > 解决方案 > 使用 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 一起使用。

谢谢您的帮助

标签: cmultithreadingsegmentation-faultpthreads

解决方案


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!

推荐阅读