Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 当我尝试实现这个动态数组时,为什么会出现EXC错误访问错误?_C++_Dynamic Data - Fatal编程技术网

C++ 当我尝试实现这个动态数组时,为什么会出现EXC错误访问错误?

C++ 当我尝试实现这个动态数组时,为什么会出现EXC错误访问错误?,c++,dynamic-data,C++,Dynamic Data,如果我提供的还不够,请告知我是否需要提供更多/不同的课程内容 我还在航空班上做我的计划。Airline类包含一个对动态Flight对象数组有效的变量 在我的航空公司课程中(无法编辑或更改,这些是分配给我的头文件): //Airline.cpp #包括“Airline.h” /*航班**阵列;//指向航班的指针的动态数组 整数容量;//最大航班数 整数大小;//实际航班数 */ 航空公司::航空公司(){ 容量=1; 尺寸=0; 数组=新航班*[1]; } 航空公司:航空公司(国际上限){ 容

如果我提供的还不够,请告知我是否需要提供更多/不同的课程内容

我还在航空班上做我的计划。Airline类包含一个对动态Flight对象数组有效的变量

在我的航空公司课程中(无法编辑或更改,这些是分配给我的头文件):



//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()方法中的构造函数呢?当我调试时,索引中的航班指向垃圾,如果我只是将其设置为我创建的航班,那怎么可能呢?@OghmaOsiris
airline.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];
        }
    }
}