c-如何显示另一个结构的列表中的一个结构



我正在做一个小项目,其中我有一个汽车结构(年份、品牌等(和一个包含汽车的收藏结构,我如何在收藏中显示汽车?

在我的车里。h我定义:

struct CarP;
typedef struct CarP * Car;
typedef const struct CarP * constCar;
Car car_createCopy(constCar c); //returns a copied car from c 
void display_car(constCar c);

在我的Collection.h文件中,我定义了:

struct CollectionP;
typedef struct CollectionP * Collection;
typedef const struct CollectionP * constCol;

和收藏。c:

struct CollectionP{
int nbCars;
Car * carList;
}
int getNbCars(constCol c){
return c -> nbCars;
}
void add_car(Collection c, constCar car){
int nbCar = getNbCars(c);
if(nbCar == 0)
c -> carList = malloc(sizeof(car));
else{
c -> carList = realloc(c -> carList,(nbCar+1)*sizeof(car));
c -> carList[nbCar] = car_createCopy(car);
}
c -> nbCars++;
}
void display_col(constCol c){
int nbCar = getNbCars(c);
for(int i = 0; i < nbCar; i++)
display_car(c -> carList[i]);
}

在将一些汽车添加到集合中后,我尝试调用显示功能,我只得到一辆品牌为null、其他字段为不同数字的汽车,然后程序因分段错误而停止。

这是错误的。(见下文// HERE(:

void add_car(Collection c, constCar car){
int nbCar = getNbCars(c);
if(nbCar == 0)
c -> carList = malloc(sizeof(car));
else{
c -> carList = realloc(c -> carList,(nbCar+1)*sizeof(car));
c -> carList[nbCar] = car_createCopy(car);  // HERE
}
c -> nbCars++;
}

该标记线负责将汽车副本放入列表中。但它从不在第一次添加时执行。它应该被移动,特别是在else块之后和外部。

void add_car(Collection c, constCar car){
int nbCar = getNbCars(c);
if(nbCar == 0)
c -> carList = malloc(sizeof(car));
else{
c -> carList = realloc(c -> carList,(nbCar+1)*sizeof(car));
}
c -> carList[nbCar] = car_createCopy(car);  // FIXED
c -> nbCars++;
}

也就是说,其中有很多地方需要进行错误检查,并且您对realloc的使用应该通过一个临时指针,以免您将分配的列表丢失给有错误的NULL结果。但你的问题的核心是我上面展示的。

相关内容

  • 没有找到相关文章