2013-05-26 197 views
-3

我目前在我的代码中出现此错误:bankAccountp5.exe中的0x0FF321E8(msvcp110d.dll)未处理的异常:0xC0000005:访问冲突写入位置0xCCCCCCF8。我确定这是与我创建的一系列对象有关的。访问冲突帮助C++

这里是我的代码部分:

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()时出现错误,我呼吁的对象账户的阵列,任何人都可以帮我这个?干杯。

+0

您应该在调试器中运行您的程序。它会告诉你_exactly_崩溃的位置,以及让你检查函数调用堆栈和变量值。 –

+0

你有没有初始化'accounts'数组?用你给出的信息看起来它的'bankAccount'指针没有被设置为有效的对象。 – Dirk

回答

1

bankAccount* accounts[MAX_NUM_ACCOUNTS]; 

创建指针的阵列。您需要为每个帐户实际分配内存的下一步。类似于

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

或者根本不使用指针。 –

+0

我会如何去做这件事?我对C++很陌生,并会很感激帮助。 – Emmett

+0

刚刚更新了我的答案。 Some-index会在0到numOfBankAccounts之间变化。 –

0

正如@scottwilson所说。而应使用包含静态分配的的bankAccount

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

像这样:每次你需要一个新的银行帐户时

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

调用此函数

,每当你想另一个bankAccount对象上,还需要一个createBankAccount()功能,将分配此为您服务。

1

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

而且你不需要写在setAccountBalance else部分()

1

accounts = new bankAccount[MAX_NUM_ACCOUNTS];需要在你的功能之一来实现。你已经声明了一个动态数组,但仍然需要初始化它。

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

添加using std::vector后你包含。这样你不需要继续输入std :: vector,你可以只说矢量。

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