繁体   English   中英

链表c丢失头地址

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM