2013-09-28 32 views
-1

我正在進行銀行模擬,作爲多態性練習,但我收到一些內存錯誤。 我可以malloc的每個向量的第一項,但如果我打電話的任何功能,程序崩潰。 同樣的情況發生,如果我嘗試malloc除1以外的任何數量的項目; (NCP或malloc的鑄造NCC> 1)找不到內存錯誤

int main(){ 
ContaPoupanca *contasp; 
ContaCorrente *contasc; 
int k = 0; 
int ncp = 3; 
int ncc = 3; 
(...) 
    switch(k){ 
     case 1: { 
      int asd; 
      std::string nome_titular; 
      int n_conta; 
      std::cout<<"\n 1 - Corrente \n 2 - Poupança"; 
      std::cin >> asd; 
      std::cout<<"\nNome do Titular: "; 
      std::cin>> nome_titular; 
      if(asd == 1){ 
       std::cout<<"nº de aplicações: (max 5)\n"; 
       std::cin>>asd; 
       if(asd>5) asd=5; 
       if(asd<0) asd=0; 
        ncc++; 
        n_conta = ncc + 2501000 - 1; 
        contasc = (ContaCorrente*) malloc(ncc*sizeof(ContaCorrente)); 
        contasc[ncc-1] = ContaCorrente(nome_titular,n_conta,1.07,0,asd); 
      }else{ 
      ncp++; 
      n_conta = ncp + 2502000 - 1; 
      contasp = (ContaPoupanca*) malloc(ncp*sizeof(ContaPoupanca)); 
      contasp[ncp-1] = ContaPoupanca(nome_titular,n_conta,1.05,0); 
      } 
      std::cout<<"\nConta criada com sucesso.\n O nº da conta é "<<n_conta<<"\n"; 
      break; 
     (...) 
     case 6: {break;} 
     } 
    }while(k!=6); 
free(contasc); 
free(contasp); 
return 0; 

}

+3

如果你使用C++,基本上沒有理由使用'malloc'。改用適當的容器(例如'std :: vector')。 –

+2

另外,請不要轉儲數百行代碼。您應該努力尋找導致問題的*最小*程序,然後發佈。 –

回答

3

不要使用malloc或免費的C++的對象。改用new和delete。

malloc不會調用您的任何構造函數,free不會調用您的任何析構函數。這就是爲什麼你會崩潰。新增和刪除操作。

+0

謝謝。 我重寫了我的代碼使用向量,因爲奧利塞家,現在正在工作。 謝謝。 –