-3

我目前在我的代码中遇到此错误: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;
};

当我得到 void setAccountBalance() 并调用对象数组时发生错误,有人可以帮我解决这个问题吗?干杯。

4

4 回答 4

1

这个

bankAccount* accounts[MAX_NUM_ACCOUNTS];

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

accounts[some-index] = new bankAccount();
于 2013-05-26T10:44:23.540 回答
1

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

此外,您不需要在 setAccountBalance() 中编写 else 部分

于 2013-05-26T10:50:18.163 回答
1

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().

于 2013-05-26T10:50:50.857 回答
0

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

否则,您可能必须为每个bankAccount指针分配内存,无论是静态的还是您可能需要的,动态的。

你还需要一个createBankAccount()函数,只要你想要另一个bankAccount对象,它就会为你分配这个:

像这样:

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

每次需要新的银行帐户时调用此函数。

于 2013-05-26T10:50:00.477 回答