C++ 当我尝试实现这个动态数组时,为什么会出现EXC错误访问错误?
如果我提供的还不够,请告知我是否需要提供更多/不同的课程内容 我还在航空班上做我的计划。Airline类包含一个对动态Flight对象数组有效的变量 在我的航空公司课程中(无法编辑或更改,这些是分配给我的头文件):C++ 当我尝试实现这个动态数组时,为什么会出现EXC错误访问错误?,c++,dynamic-data,C++,Dynamic Data,如果我提供的还不够,请告知我是否需要提供更多/不同的课程内容 我还在航空班上做我的计划。Airline类包含一个对动态Flight对象数组有效的变量 在我的航空公司课程中(无法编辑或更改,这些是分配给我的头文件): //Airline.cpp #包括“Airline.h” /*航班**阵列;//指向航班的指针的动态数组 整数容量;//最大航班数 整数大小;//实际航班数 */ 航空公司::航空公司(){ 容量=1; 尺寸=0; 数组=新航班*[1]; } 航空公司:航空公司(国际上限){ 容
//Airline.cpp
#包括“Airline.h”
/*航班**阵列;//指向航班的指针的动态数组
整数容量;//最大航班数
整数大小;//实际航班数
*/
航空公司::航空公司(){
容量=1;
尺寸=0;
数组=新航班*[1];
}
航空公司:航空公司(国际上限){
容量=上限;
尺寸=0;
阵列=新航班*[容量];
//数组=&arr;
}
作废航空公司::取消(int flightNum){
对于(int i=0;igetFlightNum()==flightNum){
数组[i]=NULL;
}
}
}
//删除具有给定航班号的航班。
//如果成功,打印“航班取消”,或打印
//如果找不到该航班,“无该航班”。
无效航空公司::添加(航班*航班){
如果(大小>=容量){
调整大小();
}
数组[大小]=飞行;
大小++;
cout getFlightNum();//这就是EXC错误访问的位置。我将数组的索引设置为指向我发送进来的航班的地址,但此后我无法访问它。。。
}
//将给定航班添加到阵列中。如果没有空间,
//将阵列容量增加一倍并复制现有航班。
//增加容量时,打印“容量增加到N”,
//其中N是新容量。
航班*航空公司::查找(int flightNum){
对于(int i=0;igetFlightNum()==flightNum){
返回数组[i];
}
}
返回0;
}
//返回带有给定编号的航班指针(如果存在),否则返回
//返回0。
航班*航空公司::查找(字符串dest){
对于(int i=0;igetDest()==dest){
返回数组[i];
}
}
返回0;
}
//返回具有给定目的地(如果存在)的航班指针,
//否则返回0。
int Airline::getSize(){
返回大小;
}
//返回数组中的航班数。
void Airline::resize(){
航班**温度=新航班*[容量*2];
航班交换机;
对于(int i=0;iseatCol;
flightTemp->reserveSeat(seatRow-1,seatCol-1);
}else if(座位类型==“过道”){
flightTemp->ReserveRoadle();
}否则
flightTemp->reserveWindow();
}
}
in.close();
cin.get();
返回0;
}
编辑我添加了所有代码,只是为了让它更简单
我现在遇到的问题是,当我在数组中运行flightNum时,尝试访问flightNum(或任何getter方法)。我将数组的索引设置为指向我在add()方法中发送的航班的地址,但此后我无法访问该地址…听起来您的写入超出了数组边界。我感觉问题就在这里:
if(size == capacity)
{
resize();
}
看看你的情况。如果大小大于容量,会发生什么情况?在这种情况下,它不会调整大小 使用构造函数:
Airline::Airline(){
capacity = 1;
size = 0;
Flight* arr = new Flight[capacity];
array = &arr;
}
这是什么
Flight* arr = new Flight[capacity];
array = &arr;
分配数组
的方法与在调整大小
中的方法相同:
Airline::Airline(){
capacity = 1;
size = 0;
array = new Flight*[1];
}
由于数组
是航班*的数组,而不是指向航班数组的指针
编辑:编辑后,代码中还有一个问题:
void Airline::add(Flight* flight){
if(size >= capacity){
resize();
}
array[size] = flight;
size++;
cout << array[size]->getFlightNum();
}
EDIT2:您的Airline::cancel
功能也有问题:
void Airline::cancel(int flightNum){
for(int i = 0; i < size; i++){
if(array[i]->getFlightNum() == flightNum){
array[i] = NULL;
}
}
}
Flight::reserveWindow
还导致seg故障,代码中仍有更多错误。既然这是家庭作业,我就让你从这里开始。很可能是因为你写的东西超出了数组的界限。演示你的问题的最短代码块是什么?如果你试图找到一个最小的例子,你可以自己解决你的问题。当它第一次出现时,size=0,所以我永远不会超出这个界限。应该哈哈,愚蠢的问题,但是大小和容量是否被正确初始化?编辑:刚刚看到你的评论。你能发布初始化代码吗?你的初始容量是多少?我希望它不是0,因为capacity*=2代码>。我们可以看到你的构造函数吗?find()方法中的构造函数呢?当我调试时,索引中的航班指向垃圾,如果我只是将其设置为我创建的航班,那怎么可能呢?@OghmaOsirisairline.find(4)
对我来说只需输入:ADD DUMMY 4 DUMMY Nowhere
。检查我在你发表评论后对“取消”所做的编辑。
Airline::Airline(){
capacity = 1;
size = 0;
Flight* arr = new Flight[capacity];
array = &arr;
}
Flight* arr = new Flight[capacity];
array = &arr;
Airline::Airline(){
capacity = 1;
size = 0;
array = new Flight*[1];
}
void Airline::add(Flight* flight){
if(size >= capacity){
resize();
}
array[size] = flight;
size++;
cout << array[size]->getFlightNum();
}
void Airline::add(Flight* flight){
if(size >= capacity){
resize();
}
array[size] = flight;
cout << array[size]->getFlightNum();
size++;
}
void Airline::cancel(int flightNum){
for(int i = 0; i < size; i++){
if(array[i]->getFlightNum() == flightNum){
array[i] = NULL;
}
}
}
void Airline::cancel(int flightNum){
for(int i = 0; i < size; i++){
if(array[i]->getFlightNum() == flightNum){
array[i] = array[--size];
}
}
}