2015-09-13 59 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欢迎您! –