首页 > 解决方案 > 在结构内部定义结构指针

问题描述

我得到这样的结构:

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));
}

并且,在其他一些 func2 中:

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。我已经检查并且两个函数中的可运行地址是相同的,并且其他可运行的 atrr 也是正确的。只有这个“下一个”道具。不是。我认为我对 struct 和“下一个”的定义是有道理的。

什么是差异beeten struct runnable_t * nextrunnable_t * next(如果可能的话)

那是问题吗?

标签: cmultithreadingstruct

解决方案


问题是你没有通过引用传递结构int myFun(runnable_t runnable),所以只是结构更改的副本,而不是原始传递的结构

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


推荐阅读