2016-05-19 6 views
1

私はクラスをテストする必要がある宿題をしています。私たちはstlを使用することは禁じられていました:)問題は、test_2でプログラムがクラッシュすることです。メインのtryステートメントに至るまで、すべて動作します。それが例外にジャンプする必要があるとき、それはちょうどクラッシュします。何が起こっているのでしょうか?前もって感謝します! :)try-catchステートメントでC++がクラッシュする

void test_2() // 
{ 
    int tomb[400]; 
    for(unsigned int j=0;j<400;j++){ 
     tomb[j]=j; 
    } 
    cout <<"array loaded \n"; 

    Buffer<int> test2(40,"test2.txt","w"); 
    Buffer<int> test21(40,"test21.txt","w"); // 40 meretu buffer 

    cout << "bufferek letrehozva \n"; 

    for(unsigned int j=0;j<400;j++){ 
     test2[j]=tomb[j]; 

    } 

    cout << "buff loaded \n"; 
    /* for(unsigned int j=0;j<400;j++){ 
     cout << test2[j] << endl; 

    } */ 
    test21=test2; 

    cout << "copy constr ran \n"; 
    unsigned int i=0; 
    for(unsigned int j=0;j<400;j++){ 
     if(i==39){for(i=0;i<40;i++){  //40 size buff 
        test21.printfile(test21[i]);} 
        i=0;} 
     else i++; 
    } 
    throw "gets here"; 


} 
int main() 
{ 

    try 
    { 
     int number; 
     cin >> number;  // nr of the test 
     switch (number) 
     { 
     case 1: 
      test_1();  // file_test 
      break; 

     case 2: 
      test_2(); // copyconst_test 
      break;  // crashes here 

     case 3: 
      test_3(); 
      break; 
     } 



    } 
    catch (exception& e) 
    { 
     cerr << e.what() << endl; 
    } 
    catch (int i) 
    { 
     cerr << i << endl; 
    } 
    catch (const char* s) 
    { 
     cerr << s << endl; 
    } 
    catch (...) 
    { 
     cerr << "*** Nagy baj van! ****" << endl; 
    } 

    return 0; 
} 
+0

はい:/最大値に達するたびにサイズが倍になります。 –

+0

これはたくさんのことがあります。あなたのバッファがデストラクタで別の例外を投げている可能性がありますか?あなたが 'スロー 'がここに来るとコメントした場合、'; '行はどうなりますか? – axalis

+0

また、const参照、つまり 'catch(const exception&e)'によってstd :: exceptionをキャッチします。 – axalis

答えて

0

は、私は40のサイズとOBJを作り、400 int型でそれをロードし

を解決しました。このプロシージャは、2つの異なるサイズのオブジェクトを等しくしたので、test2オブジェクト720のサイズを(そのサイズを倍にするオーバーロードのために)作成しました。

Buffer<int> test2(40,"test2.txt","w"); 
     // first buffer 

    cout << "bufferek made\n"; 

    for(unsigned int j=0;j<400;j++){ 
     test2[j]=tomb[j];   //load buffer 

    } 

    Buffer<int> test21(test2.getSize(),"test21.txt","w"); //make the second buffer 
関連する問題