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一旦函数退出@UnholySheep所说的内容,code>将第一个
变成一个悬空指针。基本上,您永远都不希望将结构作为参数传递,而且您几乎总是应该编写接受指向结构的指针的函数。