[英]linked list c losing head address
我正在实施“车队”管理工具。 首先,我声明了一个“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”。 任何提示、技巧或解决方案?
谢谢。
您正在分配给add_car
的局部变量,更改为:
Car *add_car(void){/* Car *x = malloc(...); ... return x */};
而在main
:
Car* cars_fleet = NULL;
cars_fleet = add_car();
如果我不将它传递给 add_car,我应该如何遍历cars_fleet 的链接? 我要回谁的地址? 添加汽车的新cars_fleet的地址?
在你的问题,你传递一个NULL
,所以没有机会迭代通过量的联系,除,用一个函数来获取一个新的节点,另一个插入这个新的Car
在列表中(通过尾)。
您正在按值传递指针。 因此,函数 void add_car (struct Car* cars_fleet) 中的任何更改在函数之外都没有影响。 您需要更改函数原型:
void add_car (struct Car* cars_fleet)
像这样:
void add_car (struct Car** cars_fleet)
然后在函数内部使用:
*cars_fleet = car
而在 main 中,调用:
add_car(&cars_fleet);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.