我正在实施"车队"管理工具。首先,我宣布了一辆" 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"。任何提示,技巧或解决方案?
谢谢。
答案 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);