2015-09-13 78 views
-3

我成功編譯了以下代碼,但是當我嘗試運行代碼時,每次我完成「cin >> instruct >>第一次輸入時都會發生」總線錯誤(核心轉儲)名字>> Bal「。我在網上搜索了關於巴士錯誤的信息,但我仍然無法找到我的錯誤。請幫助我,非常感謝!C++總線錯誤(核心轉儲)

// Bank.h 
    1 #ifndef BANK_H 
    2 #define BANK_H 
    3 using namespace std; 
    4 
    5 class BankAccount{ 
    6  private: 
    7  string _name; 
    8  double _balance; 
    9 
    10  public: 
    11  BankAccount(string, double); 
    12  string getName(); 
    13  void setName(string); 
    14  double getBalance(); 
    15  void setBalance(double); 
    16  void Withdraw(double); 
    17  void Deposite(double); 
    18  void interest(int, int); 
    19 
    20 }; 
    21 #endif 

//Bank.cpp 
1 #include<iostream> 
2 #include<string> 
3 #include "Bank.h" 
4 using namespace std; 
5 
6 BankAccount::BankAccount(string name, double balance):_name(name), 
7 _balance(balance){} 
8 
9 string BankAccount::getName(){ return _name;} 
10 
11 double BankAccount::getBalance(){ return _balance;} 
12 
13 void BankAccount::setName(string name){ 
14  _name = name; 
15  return; 
16 } 
17 
18 void BankAccount::setBalance(double balance){ 
19  _balance = balance; 
20  return; 
21 } 
22 
23 void BankAccount::Withdraw(double balance) 
24 { 
25 
26  _balance = _balance - balance; 
27  return; 
28 } 
29 
30 void BankAccount::Deposite(double balance) 
31 { 
32 
33  _balance = _balance + balance; 
34  return; 
35 } 
36 
37 void BankAccount::interest(int interestRate, int M) 
38 { 
39  double interest; 
40 
41  interest = _balance*(interestRate/1200*1.0)*M; 
42  _balance = _balance + interest; 
43 
44  return; 
45 } 


    //BankMain.cpp 
    1 #include<iostream> 
    2 #include<string> 
    3 #include "Bank.h" 
    4 using namespace std; 
    5 
    6 int main() 
    7 { 
    8  int x, p, check=1, i=0, j; 
    9  double Bal; 
10  BankAccount* Account[100]; 
11  string name; 
12  string instruct; 
13 
14  cin >> x >> p; 
15 
16  while(check) 
17  { 
18   cin >> instruct >> name >> Bal; 
19 
20   if(instruct == "Create") 
21   { 
22    Account[i]->setName(name); 
23    Account[i]->setBalance(Bal); 
24    Account[i]->interest(x, p); 
25    i++; 
26   } 
27   else 
28   { 
29    if(instruct == "Withdraw") 
30    { 
31     for(j=0; j<i;j++) 
32     { 
33      if(Account[j]->getName() == name) 
34       break; 
35       } 
36       Account[j]->Withdraw(Bal); 
37 
38    } 
39 
40    if(instruct == "Deposite") 
41    { 
42     for(j=0; j<i; j++) 
43     { 
44      if(Account[j]->getName() == name) 
45       break; 
46     } 
47     Account[j]->Deposite(Bal); 
48    } 
49   } 
50 
51   if(instruct == "0") 
52    check = 0; 
53  } 
54 
55  cout << i; 
56  for(j=0; j<i; j++) 
57  { 
58  cout << Account[j]->getName() << " " << Account[j]->getBalance(); 
59   cout << endl; 
60  } 
61 
62  return 0; 
63 } 
+1

最好你啓動你的調試器,逐行通過你的代碼找到錯誤的來源。 –

+1

所以你已經閱讀[什麼是總線錯誤?](http://stackoverflow.com/questions/212466/what-is-a-bus-error)而你檢查,你不是,例如「使用一個未初始化的僞指針。「 ? – Leiaz

回答

1

在代碼中有許多缺陷。 第一個是你定義了一個指針陣列BankAccount* Account[100];,你可以在初始化的時候訪問它......爲什麼?此數組包含垃圾,並且如果您需要先創建一個新帳戶,請使用new BankAccount(name, balance),並將其分配給此數組中的相應索引。

然後,您掃描某個特定名稱的所有內部循環都假定找到了該名稱並訪問Account[j]->...但如果找不到j==iname

這些是我看到的主要。 當然還有更多,但不應該引起「核心轉儲」。 就像按值傳遞字符串或將整數除以1200(如果該整數小於1200,您將得到0)。

+0

問題已修復!這是由於指針數組。當我試圖通過使用新的BankAccount(名稱,餘額)創建一個新帳戶時,它工作。非常感謝 ! – SQL

+0

@SQL歡迎您! –