2016-05-19 28 views
1

Also mache ich Hausaufgaben, wo wir unsere Klasse testen müssen. Es war uns verboten, stl. Zu verwenden :) Das Problem ist, dass bei test_2 das Programm abstürzt. Es funktioniert alles, bis es zur Hauptprobe kommt. Wenn es zur Ausnahme springt, stürzt es einfach ab. Irgendeine Idee warum passiert das? Danke im Voraus! :)C++ Absturz bei Try-Catch-Anweisung

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

Ja:/Immer wenn es das Maximum erreicht, verdoppelt es seine Größe. –

+0

Dies kann eine Menge Dinge sein, vielleicht wirft Ihr Puffer eine weitere Ausnahme im Destruktor? Wenn du den "throw" hier kommst ";" line, was passiert? – axalis

+0

Fangen Sie auch die std :: exception durch const-Referenz, d. H. 'Catch (const exception & e)'. – axalis

Antwort

0

GELöST

ich ein obj mit der Größe von 40 hergestellt und beladen mit 400 int. Diese Prozedur hat die Größe des Test2-Objekts 720 (wegen der Überladung verdoppelt sich die Größe), so dass ich zwei Objekte gleicher Größe erstellt habe.

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