使用指针构建链表

时间:2014-10-08 01:41:32

标签: c pointers

我在使用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;
};

非常感谢! =)

1 个答案:

答案 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;
}