我在使用C中的指针时遇到了一些麻烦。很长一段时间我都没有使用它,所以我现在头脑很乱。
函数“newstage”创建一个阶段(只是一个结构),它传递给“addintopollingtable”。这个函数只是获取指针并开始构建一个链表。
我在“(* currentStage) - > next = s;”中收到“来自不兼容指针类型的分配”但我不知道这是否是唯一的问题。
我构建的第一个阶段必须由“firstStage”指向,其他必须指向“next”。
“newstage”将被多次调用..
stage_t * firstStage = NULL;
stage_t * currentStage = NULL;
int stagesCount = -1;
static void addintopollingtable (stage_t * s) {
stagesCount++;
// First stage
if (firstStage == NULL)
{
firstStage = s;
currentStage = s;
return;
}
(*currentStage)->next=s;
currentStage = s;
}
static int newstage() {
stage_t * stage=NULL;
(*stage)=malloc(sizeof(struct lstage_Stage));
(*stage)->instances=lstage_lfqueue_new();
...
addintopollingtable(stage);
return 1;
}
我的stage_t:
typedef struct lstage_Stage * stage_t;
struct lstage_Stage {
LFqueue_t instances;
LFqueue_t event_queue;
Pqueue_t ready_queue;
pool_t pool;
int init_time;
int processed;
int enabled;
char * env;
size_t env_len;
volatile unsigned int flags;
volatile int priority;
stage_t parent;
stage_t next;
int lock;
};
非常感谢! =)
答案 0 :(得分:0)
我认为主要问题是由你的typedef
引起的 typedef struct lstage_Stage * stage_t;
这意味着stage_t是指向struct lstage_Stage的类型。
因此,我认为纠正错误的最简单方法是声明变量stage_t
而不是stage_t *
。因为它们已经成为指针。
stage_t firstStage = NULL;
stage_t currentStage = NULL;
int stagesCount = -1;
static void addintopollingtable (stage_t s) {
stagesCount++;
// First stage
if (firstStage == NULL)
{
firstStage = s;
currentStage = s;
return;
}
currentStage->next=s;
currentStage = s;
}
static int newstage() {
stage_t stage=NULL;
stage=malloc(sizeof(struct lstage_Stage));
stage->instances=lstage_lfqueue_new();
...
addintopollingtable(stage);
return 1;
}