[英]Comapring two vector elements and get EXC_BAD_ACCESS(code=1, address = 0x0) error
我正在编写一个程序,一次需要比较两个元素(9个元素的向量)以找到最低的元素。 为此,我创建了一个类似于Bubblesort的Sort函数,在排序的最后,我将获取vector的第一个元素(哪一个是最低的)。 我的问题是Xcode告诉我我的方程式指向NULL。 有任何想法吗?
void ParkingLot::GateA(){
vector<int> AvailSpots (9);
AvailSpots[0] = 40;
AvailSpots[1] = 20;
AvailSpots[2] = 50;
AvailSpots[3] = 30;
AvailSpots[4] = 55;
AvailSpots[5] = 15;
AvailSpots[6] = 20;
AvailSpots[7] = 33;
AvailSpots[8] = 27;
vector<string> Lot (9);
Lot[0] = "A";
Lot[1] = "B";
Lot[2] = "C";
Lot[3] = "D";
Lot[4] = "E";
Lot[5] = "F";
Lot[6] = "G";
Lot[7] = "H";
Lot[8] = "I";
vector<int> Cost (9);
Cost[0] = 25.00;
Cost[1] = 22.50;
Cost[2] = 20.00;
Cost[3] = 22.50;
Cost[4] = 20.00;
Cost[5] = 17.50;
Cost[6] = 20.00;
Cost[7] = 17.50;
Cost[8] = 15.00;
vector<int> Distance (9);
Distance[0] = 10;
Distance[1] = 20;
Distance[2] = 30;
Distance[3] = 20;
Distance[4] = 30;
Distance[5] = 40;
Distance[6] = 30;
Distance[7] = 40;
Distance[8] = 50;
int choice2;
cout << "-------------------------------------------------------------------------" << endl;
cout << setw(50) << "GATE A: Lot Information" << endl;
cout << "-------------------------------------------------------------------------" << endl;
cout << "LOT ID : MAX CAPACITY : AVAILABLE SPOTS : COST($DD.CC) : DISTANCE" << endl;
cout << "-------------------------------------------------------------------------" << endl;
cout << Lot[0] << ": 40 : "<<AvailSpots[0]<<": "<<setw(20)<<" "<<Cost[0]<<" : " <<Distance[0] << endl;
cout << Lot[1] << ": 20 : "<<AvailSpots[1]<<": "<<setw(20)<<" "<<Cost[1]<<" : " <<Distance[1] << endl;
cout << Lot[2] << ": 50 : "<<AvailSpots[2]<<": "<<setw(20)<<" "<<Cost[2]<<" : " <<Distance[2] << endl;
cout << Lot[3] << ": 30 : "<<AvailSpots[3]<<": "<<setw(20)<<" "<<Cost[3]<<" : " <<Distance[3] << endl;
cout << Lot[4] << ": 55 : "<<AvailSpots[4]<<": "<<setw(20)<<" "<<Cost[4]<<" : " <<Distance[4] <<endl;
cout << Lot[5] << ": 15 : "<<AvailSpots[5]<<": "<<setw(20)<<" "<<Cost[5]<<" : " <<Distance[5] <<endl;
cout << Lot[6] << ": 20 : "<<AvailSpots[6]<<": "<<setw(20)<<" "<<Cost[6]<<" : " <<Distance[6] << endl;
cout << Lot[7] << ": 33 : "<<AvailSpots[7]<<": "<<setw(20)<<" "<<Cost[7]<<" : " <<Distance[7] << endl;
cout << Lot[8] << ": 27 : "<<AvailSpots[8]<<": "<<setw(20)<<" "<<Cost[8]<<" : " <<Distance[8] << endl;
cout << " Total : 290 : "<<TotalAvailSpots<<":" << endl;
cout << "Select a criteria to allot a parking lot :" << endl;
cout << "1. Based on Cost - Cheapest Parking Lot" << endl;
cout << "2. Based on Distance - Closest to Stadium" << endl;
cout << "0. EXIT" << endl;
cout << "Enter Option (1-2): " << endl;
cin >> choice2;
if (choice2 == 1) {
ParkingLot::Sort();
}
}
int ParkingLot::Sort(){
int cost;
for (int i = 0; i < 8; i++){
if (Cost[i] > Cost[i + 1]) { /////////////ERROR APPEARS HERE Thread1:EXC_BAD_ACCESS(code=1, address=(0x0)
ParkingLot::Swap(i, i+1);
}
}
cout << "Cost of parking lot " << Cost.front() << endl;
cin >> cost;
return cost;
}
void ParkingLot::Swap(int a, int b){
int tmp = Cost[a];
Cost[a] = Cost[b];
Cost[b] = tmp;
}
您在GateA
中定义的变量是函数的局部变量,并隐藏任何具有相同名称的成员变量。
因此,您在Sort
and Swap
使用的Cost
向量为空,因为它与GateA
构建的GateA
。
删除线
vector<int> Cost (9);
从GateA
调用,而是在分配元素之前调用Cost.resize(9)
,或者使用push_back
而不是直接索引构建矢量。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.