访问冲突有助于C ++

时间:2013-05-26 10:41:21

标签: c++ arrays object access-violation

我目前在我的代码中收到此错误: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 个答案:

答案 0 :(得分:1)

这个

bankAccount* accounts[MAX_NUM_ACCOUNTS];

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

这样的东西
accounts[some-index] = new bankAccount();

答案 1 :(得分:1)

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

此外,您不需要在setAccountBalance()

中编写else部分

答案 2 :(得分:1)

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

编辑:您应该考虑使用stl结构 vector 。这将允许您将新帐户推入您的阵列和其他各种事物。使用指针和动态分配的数组需要您管理内存和其他此类不必要的痛苦。 看看这个:http://www.cplusplus.com/reference/vector/vector/

在您的内容后添加using std::vector。这样你就不需要继续输入std :: vector,你可以说是vector。

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

答案 3 :(得分:0)

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

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

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

像这样:

bankAccount

每次需要新的银行帐户时都要调用此功能。