所以我在这里打破了我的头脑。我一直在上下阅读,我只是无法弄清楚为什么我的程序崩溃,一旦我到达main中的for循环内的setLoan函数。 AM我错过了什么,或者我是否实现了错误的指针?提前致谢。
#include <string>
#include <iostream>
using namespace std;
//Vehicle Class
class Vehicle {
public:
Vehicle();
void setPrice(double a);
void setMpg(int a);
double getPrice() const;
int getMpg() const;
void printVehicle() const;
Vehicle(double price, int mpg);
private:
double price;
int mpg;
};
//Loan Class
class Loan {
public:
void setBank(string a);
void setLoan(double a);
string getBank() const;
double getLoan() const;
void printLoan() const;
Loan(string bank = "", double loan = 0);
private:
string bank;
double loan;
};
//Car Class
class Car : public Vehicle {
public:
Car(double price = 0, int mpg = 0, string bank = "", double loan = 0, string name = "", int element = 0);
void setName(string a);
void setLoan(string b, double l, int element);
string getName() const;
void printFull() const;
void setNbrOfLoans(int a);
~Car();
private:
string name;
Loan* pLoan;
int nbrOfLoans;
};
//Main
int main() {
Car car1(24800, 22, "Citi", 21600, "Mustang", 1);
Car car2;
Car* pCar1 = &car1;
Car* pCar2 = &car2;
cout << "Enter the price of the car: ";
double price;
cin >> price;
pCar2->setPrice(price);
cout << "Enter the mpg: ";
int mpg;
cin >> mpg;
pCar2->setMpg(mpg);
cout << "Enter the name of the car: ";
string name;
cin >> name;
pCar2->setName(name);
string bank;
double loan;
int index;
cout << "Enter the amount of loans you obtained: ";
cin >> index;
pCar2->setNbrOfLoans(index);
for (int i = 0; i < index; i++)
{
cout << "Enter the name of bank " << i + 1 << ": ";
cin >> bank;
cout << "Enter the amount of loan " << i + 1 << ": ";
cin >> loan;
pCar2->setLoan(bank, loan, i);
}
cout << endl;
pCar1->printFull();
pCar2->printFull();
return 0;
}
////////////////////////////////////////////////////////////////////////////////////////
//Vehicle class function definitions
////////////////////////////////////////////////////////////////////////////////////////
Vehicle::Vehicle() {
price = 0;
mpg = 0;
}
Vehicle::Vehicle(double price, int mpg) {
price = price;
mpg = mpg;
}
void Vehicle::setPrice(double a) {
price = a;
}
void Vehicle::setMpg(int a) {
mpg = a;
}
double Vehicle::getPrice() const {
return price;
}
int Vehicle::getMpg() const {
return mpg;
}
void Vehicle::printVehicle() const {
cout << "Price: " << price << endl;
cout << "MPG: " << mpg << endl;
}
////////////////////////////////////////////////////////////////////////////////////////
//Loan Class function definitions
///////////////////////////////////////////////////////////////////////////////////////
Loan::Loan(string bank, double loan) {
bank = bank;
loan = loan;
}
void Loan::setBank(string a) {
bank = a;
}
void Loan::setLoan(double a) {
loan = a;
}
string Loan::getBank() const {
return bank;
}
double Loan::getLoan() const {
return loan;
}
void Loan::printLoan() const {
cout << "Bank: " << bank << endl;
cout << "Loan: " << loan << endl;
}
////////////////////////////////////////////////////////////////////////////////////
//Car Class function definitions
////////////////////////////////////////////////////////////////////////////////////
Car::Car(double price, int mpg, string bank, double loan, string name, int element) : Vehicle(price, mpg)
{
nbrOfLoans = element;
Car::name = name;
pLoan = new Loan[nbrOfLoans];
}
void Car::setName(string a) {
name = a;
}
void Car::setLoan(string b, double l, int element) {
pLoan[element].setBank(b);
cout << " ";
pLoan[element].setLoan(l);
}
string Car::getName() const {
return name;
}
void Car::setNbrOfLoans(int a) {
nbrOfLoans = a;
}
void Car::printFull() const {
cout << endl << "Name: " << name << endl;
printVehicle();
for (int i = 0; i < nbrOfLoans; i++)
{
cout << pLoan[i].getBank();
cout << endl;
cout << pLoan[i].getLoan();
cout << endl;
}
}
Car::~Car() {
delete[] pLoan;
}
答案 0 :(得分:0)
当您为Car::setLoan
致电pCar2
时,您正在尝试访问大小为零的动态数组。
Car car2;//the nbrOfLoans member is 0 and pLoan is not pointing to anywhere
....
Car* pCar2 = &car2;//the nbrOfLoans member is 0 and pLoan is not pointing to anywhere
...
Car::Car(double price, int mpg, string bank, double loan, string name, int element) : Vehicle(price, mpg)
{
...
pLoan = new Loan[nbrOfLoans];//doesn't create anything if nbrOfLoans is 0, which is the default
}
当你第一次尝试在第二辆汽车(car2)的构造函数中为pLoan
分配内存时,nbrOfLoans
的大小为0,所以你的指针没有指向任何东西。之后您尝试通过调用pCar2->setLoan(bank, loan, i);
来访问它。
如果您可以使用std::vector
会更好,否则您需要在知道它应该保持的大小后创建/调整动态数组的大小,即在获得nbrOfLoans
的值Car::setNbrOfLoans
之后1}}。
void Car::setNbrOfLoans(int a) {
nbrOfLoans = a;
if(pLoan!=NULL)
delete[] pLoan;
pLoan = new Loan[nbrOfLoans];
}