链表c失去头部地址

时间:2016-05-07 09:55:21

标签: c linked-list

我正在实施"车队"管理工具。首先,我宣布了一辆" Car"结构:

typedef struct Car{
    char ID[9];
    struct Car* next;
} Car;

我的车队只是一个列车链接。我从空头开始,并通过add_car函数添加链接。

void add_car (struct Car* cars_fleet){
     struct Car* car = malloc (sizeof (car));
     scanf("%s",car->ID); 
     car->next = NULL;

if (cars_fleet == NULL){
    printf ("creating new list\n");
    cars_fleet = car;    
}

else {
    printf ("appending\n"); 
    Car* tmp = cars_fleet;
    while (! (tmp->next == NULL))
        tmp = tmp->next;
    tmp->next = car; 
}
}

这是我的主要计划:

int main(){
Car* cars_fleet = NULL;
add_car(cars_fleet);
}

现在,出于某种原因,我的程序会将所有链接视为第一个链接。我认为这是由于错误的内存分配而发生的,可能是在" cars_fleet = car"。任何提示,技巧或解决方案?
谢谢。

2 个答案:

答案 0 :(得分:0)

您要分配到add_car中的本地变量,请更改为:

Car *add_car(void){/* Car *x = malloc(...); ... return x */};

main

Car* cars_fleet = NULL;
cars_fleet = add_car();
  

如果我不这样做,我应该如何遍历cars_fleet的链接   把它传递给add_car?我回来的地址是谁?的地址   添加了汽车的新cars_fleet?

在您的问题中,您传递的是NULL,因此没有机会通过链接进行迭代,划分,使用函数来获取新节点,另一个用于在此处插入新的Car列表(传递尾部)。

答案 1 :(得分:0)

您正在按值传递指针。因此函数void add_car(struct Car * cars_fleet)中的任何更改都不会影响函数。你需要改变函数原型:

void add_car (struct Car* cars_fleet)

像这样:

void add_car (struct Car** cars_fleet)

然后在函数内使用:

*cars_fleet = car

虽然主要是致电:

add_car(&cars_fleet);