2015-09-13 2 views
-3

J'ai compilé avec succès les codes suivants, mais quand j'ai essayé d'exécuter les codes, une erreur de bus (core dumped) s'est produite chaque fois que j'ai terminé ma première entrée de "cin >> instruct >> nom >> Bal ". J'ai cherché en ligne sur l'erreur de bus, mais je n'ai toujours pas trouvé mon erreur. S'il vous plaît aidez-moi avec ceci, merci beaucoup!Erreur de bus C++ (core dumped)

// 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

Il est préférable de démarrer votre débogueur et de parcourir votre code ligne par ligne pour trouver la source de l'erreur. –

+1

Donc, vous avez lu [Qu'est-ce qu'une erreur de bus?] (Http://stackoverflow.com/questions/212466/what-is-a-bus-error) Et vous avez vérifié, que vous n'êtes pas, par exemple "en utilisant un pointeur non initialisé donc faux. " ? – Leiaz

Répondre

1

Vous avez beaucoup d'embûches dans votre code. La première est que vous avez défini un tableau de pointeurs BankAccount* Account[100]; et que vous y accédez à mesure qu'ils sont initialisés ... Pourquoi? Ce tableau contient des ordures et si vous devez créer un nouveau compte, utilisez d'abord new BankAccount(name, balance) et attribuez-le à l'index approprié dans ce tableau.

Ensuite, toutes vos boucles internes qui recherchent un nom spécifique supposent que ce nom est trouvé et accèdent à Account[j]->... mais que se passe-t-il si j==i et name n'a pas été trouvé?

Ce sont les principaux que j'ai vus. Bien sûr, il y en a plus mais ils ne devraient pas causer de "core dump". Comme si vous passiez une chaîne par valeur ou si vous divisiez un nombre entier de 1200 (si cet entier est inférieur à 1200, vous obtiendrez 0).

+0

Le problème est résolu! et c'était dû au tableau de pointeur. Comme j'ai essayé de créer un nouveau compte en utilisant le nouveau compte bancaire (nom, solde), cela a fonctionné. Merci beaucoup ! – SQL

+0

@SQL Vous êtes les bienvenus! –