我有一个包含列表数组的列表。
我有2种对象类型" Flight"和"人们"另一个是"管理"。我创建了一个列表,其中包含每个Flight对象的人员列表。我试图制作一份列表,列出分配给每个航班的人员名单。
但我只能将1个列表添加到位置0的列表列表中。除此之外的任何内容都是分段错误。
这是我的飞行班;
class Flight {
public:
int maxPeople;
int currentPos = -1;
int flightNo;
People list[50]; // list of people
public:
Passenger *list;
Flight();
Flight(int maxPassenger, int flightNo);
void addPeople(Passenger passenger);
};
class Management {
public:
const int maxFlights=20;
public:
Management();
addFlight(Flight flight);
};
这是我对原型的实现:
//Global Variables
int currentPos1=-1; //
Flight *list2[20]; //list of list
//Constructor
Flight::Flight(int maxPeople2, int flightNo2) {
maxPeople = maxPeople2;
list = new People[maxPassenger]; //List means List of Passengers
flightNo = flightNo2;
Management::Management() {};
//Addflight
void Management::addFlight(Flight flight) {
currentPos1++;
*list2[currentPos1] = flight;
}
//Main
int main(void) {
Flight f1 (25, 333);
Flight f2 (25, 444);
a.addFlight(f1); // works
a.addFlight(f2); //Segfault
}
我每次添加时都会递增currentPos1。列表清单(* list [20])分配了20个点。我无法弄清楚为什么它会尝试访问那些不存在且导致分段错误的位置。 任何帮助将非常感激。
答案 0 :(得分:0)
您不会在list2
的任何位置初始化或分配任何指针的存储空间。第一次调用addFlight()
并不是段错误,这是随机的。这段代码
*list2[currentPos1]
最终取消引用随机内存位置。如果你改成它:
list2[currentPos1] = &flight;
那就差一点,因为flight
是一个函数参数,只要addFlight()
返回就会消失。
为什么使用指针和本机数组?不要那样做。使用std::vector
。
将list2
更改为
std::vector< Flight > list2;
并在addFlight()
list2[currentPos1] = flight;
答案 1 :(得分:-1)
我更改了addFlight()
中的函数Management
,如下所示,它起作用(至少在我的编译器中没有完整的代码)
list2[currentPos1]=& flight;
原来是
*list2[currentPos1]=flight;