Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 在结构内部定义结构指针_C_Multithreading_Struct - Fatal编程技术网

C 在结构内部定义结构指针

C 在结构内部定义结构指针,c,multithreading,struct,C,Multithreading,Struct,我得到了这样的结构: typedef struct runnable { /* something */ struct runnable *next; } runnable_t; 在某些功能上: int myFun(runnable_t runnable) { /* something */ runnable.next = NULL; pool->first = &runnable; pthread_cond_signal(&(po

我得到了这样的结构:

typedef struct runnable
{
    /* something */
    struct runnable *next;
} runnable_t;
在某些功能上:

int myFun(runnable_t runnable)
{
   /* something */
   runnable.next = NULL;
   pool->first = &runnable;
   pthread_cond_signal(&(pool->myCond));
   pthread_mutex_unlock(&(pool->lock));
}
在其他函数2中:

if (pool->first == NULL)
            pthread_cond_wait(&(pool->myCond), &(pool->lock));

printf("%d\n",pool->first);
好的,那么:myFunc应该将runnable->next设置为NULL并向myCond发送信号,然后我需要在其他函数中使用runnable->next

问题在于func2内部:runnable->next不为NULL。我已经检查过,两个函数中runnable的地址是相同的,runnable的其他atrr也是正确的。只有这个“下一个”道具。事实并非如此。我假设我对struct和“next”的定义是合理的

什么是差异
struct runnable\u t*next
runnable\u t*next
(如果可能的话)


这是个问题吗

问题在于,在
int myFun(runnable\u t runnable)
中,您没有通过引用传递struct,因此只需复制结构更改,而不是原始传递的结构


您必须将函数行为更改为
int-myFun(runnable\u t*runnable)
,并将函数中的
runnable改为
runnable->
runnable->next=NULL;

myFun
获取结构的副本,因此您所做的任何更改(如
runnable.next=NULL;
)都在副本上完成,不是原来的。和
pool->first=&runnable
第一个
变成一个悬空指针。基本上,您永远都不希望将结构作为参数传递,而且您几乎总是应该编写接受指向结构的指针的函数。