访问冲突帮助c++

Access violation help C++

本文关键字:c++ 帮助 访问冲突      更新时间:2023-10-16

我目前在我的代码中得到此错误:bankAccountp5.exe中0x0FF321E8 (msvcp110d.dll)的未处理异常:0xC0000005:访问违规写入位置0xCCCCCCF8。我确信这与我创建的一个对象数组有关。

下面是我的部分代码:

class bankAccount: public bankBranch
{

public:
bankAccount(int, int, int, string, int);
int setAccountNumber () 
{ 
    bankAccountNumber = ++minAccountNumber;
    return this->bankAccountNumber;
}
void setAccountBalance ()
{ 
    for(i = 0; i < getNumOfBankAccounts(); i++)
    {
        cout << "Enter the balance for your bank Account: " << endl;
        cin >> accounts[i]->bankAccountBalance;
        if (bankAccountBalance > MAX_BALANCE || bankAccountBalance < MIN_BALANCE)  
        {
            cout << "Incorrect bank balance, please try again!" <<  endl;
            --i;
        } else { 
            ++i;
        } 

}
}
void menuSystem(int choice) { 
}
void displayBankBranchDetails()
{   
    cout << "n";
    cout << "DETAILS OF YOUR BANK BRANCH" << endl;
    cout << "BSB Number: " << this->getBsbNumber() << endl;
    cout << "Address: " << this->getAddress() << endl;
    cout << "Postal code: " << this->getPostCode() << endl;
}
void setBankAccountDetails() { 
}
int getNumOfBankAccounts() {
    return this->numOfBankAccounts;
}
void createBankAccounts()
{
valid = false;
while (valid == false) {
    cout << "How many Bank Accounts would you like to create under the Bank     Branch BSB: " << getBsbNumber() << endl;
    cin >> numOfBankAccounts;
    if ( numOfBankAccounts <= MAX_NUMBER_ACCOUNTS)
    {
        valid = true;
    } else { 
        valid = false;
    }
} 
}
private:
//bankAccount Data 
int bankAccountNumber;
int numOfBankAccounts;
int bankAccountBalance;
int interestRate;
//constants
const static int MAX_NUMBER_ACCOUNTS = 10;
const static int MAX_BALANCE = 100000;
const static int MIN_BALANCE = 0;
//objects
bankBranch homeBranch;
bankAccount* accounts[MAX_NUM_ACCOUNTS];

//misc
int minAccountNumber;
int i;
bool valid;
};

错误发生时,我得到无效setAccountBalance(),我调用对象的帐户数组,谁能帮助我这个?欢呼。

你已经声明了一个指针数组,你必须动态地为它分配内存,bankAccount* accounts[MAX_NUM_ACCOUNTS];

此外,您不需要在setAccountBalance()

中编写else部分

This

bankAccount* accounts[MAX_NUM_ACCOUNTS];

创建一个指针数组。下一步需要为每个帐户实际分配内存。就像

accounts[some-index] = new bankAccount();

accounts = new bankAccount[MAX_NUM_ACCOUNTS];需要在您的一个函数中完成。你已经声明了一个动态数组,但仍然需要初始化它。

编辑:你真的应该考虑使用stl结构向量。这将允许您将新帐户推送到您的数组和各种其他事情。使用指针和动态分配的数组需要管理内存和其他不必要的麻烦。看看这个:http://www.cplusplus.com/reference/vector/vector/

在包含项后添加using std::vector。这样你就不需要一直键入std::vector,你可以直接说vector。

那么,vector<bankAccount> accounts将声明一个名为accounts的向量。添加新帐户时,只需调用accounts.push_back(_______)即可。你可以使用[]accounts.size()访问元素

正如@scottwilson所说。相反,使用包含静态分配的bankAccount s的std::vector<bankAccount>

否则,您可能必须为每个bankAccount指针静态地或动态地分配内存。

你还需要一个createBankAccount()函数,当你想要另一个bankAccount对象时,它将为你分配这个对象:

一样:

public:
   void createBankAccount() {
       accounts[getNumberOfBankAccounts()] = new bankAccount();
       numOfBankAccounts++;
   }

每次需要一个新的银行账户时调用这个函数。