[c++] resize() führt zum Absturz

paramit100

Grünschnabel
Hallo zusammen,

habe ein riesen Problem was sich einfach nicht lösen lässt und woran ich schon seit zwei Tagen sitze. Hoffe einer von euch kann mir weiterhelfen, bin echt am verzweifeln. Vielen Dank schon mal im Vorraus. Ika

Ich habe folgenden Quellcode:

Code:
// Datei einlesen
void GegliederterText::set_in_gegliedertertext(char * new_name_filelist, string new_bez_abschnitt){
    
    string ueberschrift;
    string buffer;
    filelist = string(new_name_filelist);  //string erzeugen
    bez_abschnitt = new_bez_abschnitt;
   
    text.clear(); // Loescht alle Elemente
    // Datei Liste oeffnen
    
    fin.open(filelist.c_str());     // formatiert den Dateinamen in ein Zeichenkette-Format
    if(!fin){ 
          cout << "Konnte Datei nicht oeffnen!" <<  filelist << endl; 
    }
    else {
        
         while(getline(fin, buffer)){ // Inhalt einlesen
         	text.push_back(buffer);
		cout << "Bufferausgabe " <<buffer << endl;
         }        
         for(int i=0; i<text.size(); i++){
                cout << "size" << text.size(); 
	        if(!text[i].empty() || text[i] != "\n"){
			cout << "i = " << i << ", text[i] = " << text[i] << endl; 
                	Gtext.resize(i+1);
			ifstream datei_abschnitt(text[i].c_str()); 
   		
			if(!datei_abschnitt){ 
          			cout << "Konnte Datei" << text[i].c_str() << " +++nicht oeffnen!" << endl; 
    			} 
          		while(getline(datei_abschnitt, buffer)){ // Inhalt einlesen
         			Gtext[i].append_string(buffer);
				cout << "buffer = " << buffer << endl; 
         		} 
			cout << "Test: Gtext[i].print()" << endl; 
			Gtext[i].print();   
 			cout << "Test Ende " << endl; 

                }
		 /*pfad = text.at(i);
                 ueberschrift = bez_abschnitt;
	         TextObjekt gtext(Gtext.at(i));                 
                 gtext.at(i).append_string(ueberschrift); */
		 cout << "my test" <<endl; 
                 //Gtext.at(i).set_in_datei(pfad.c_str());
         }     
          
    }
    fin.close();
}

Das Prob ist, dass ich beim kompilieren folgende Fehlermeldung erhalte und nicht wirklich was damit anfangen kann.(bin blutiger Anfänger): Die Headerdatei <vector> wurde eingebunden, falls es darauf geschoben wird :). Es funktioniert weder unter Linux noch unter Windows. Gtext ist übrigens das:
Code:
vector<TextObjekt> Gtext;
Code:
C:\Dev-Cpp\include\c++\3.4.2\bits\stl_algobase.h   instantiated from `void std::fill(_ForwardIterator, _ForwardIterator, const _Tp&) [with _ForwardIterator = __gnu_cxx::__normal_iterator<TextObjekt*, std::vector<TextObjekt, std::allocator<TextObjekt> > >, _Tp = TextObjekt]'
 
Zuletzt bearbeitet:
Hallöchen,
ich glaub, die eigentliche Fehlermeldung hast du vergessen, hinzuzufügen.
Ich rate mal ins Blaue hinein:
Die Funktion std::fill() möchte einen Container (in deinem Falle "vector") mit einer Reihe von Werten füllen. Vielleicht hat deine Klasse "TextObject" keinen vernünftigen Default-Constructor.
Falls ich falsch liege, gib mal ein paar weitere Infos.
Noch ein Tipp: Code-Ausschnitte formatiere bitte als Code:
Code:
programmtext
.
Dann wirds übersichtlich.:)

Grüße OS
 
Hui doch eine Antwort :) Danke.

es gibt einen Defaultkonstruktor, einen Konstruktor mit Parametern und noch einen Kopierkonstruktor.
Ich habe alle Dateien hochgeladen falls jemand Interesse hat :)

http://eyedea.net/fh/a8_c.cpp
http://eyedea.net/fh/gegliedertertext.h
http://eyedea.net/fh/textobject.h
http://eyedea.net/fh/liste.txt

Ich habe einen Breakepoint (system("Pause")) gesetzt und und die Fehlermeldungen kommen schon vor resize(). Wenn ich die beiden Zeilen unterm Breakpoint entferne, läuft das Prog ohne Fehler.

Code:
void GegliederterText::set_in_gegliedertertext(char * new_name_filelist, string new_bez_abschnitt){
    
    string ueberschrift;
    string datei_abschnitt_buffer;
    filelist = string(new_name_filelist);  //string erzeugen
    bez_abschnitt = new_bez_abschnitt;
    ifstream datei_abschnitt;
   
    //text.clear(); 
    // Datei Liste oeffnen
    
    set_in_datei(new_name_filelist);
    
    for(int i=0; i < text.size(); i++){
            cout << "size i: " << i << endl;
            datei_abschnitt.open(text[i].c_str());
            cout << "*set_in_gegliedertertext* Txt Dateien: " << text[i] << endl; 
            if(!datei_abschnitt){ 
              cout << "*set_in_gegliedertertext* Konnte Datei " << text[i] << " nicht oeffnen!" << endl; 
        }
        else {
             cout << "*set_in_gegliedertertext* Konte Datei " << text[i] << " oeffnen!" << endl;
             
             while(getline(datei_abschnitt, datei_abschnitt_buffer)){ // Inhalt einlesen
                 cout << "*set_in_gegliedertertext* BufferZeile: " << datei_abschnitt_buffer << endl;
                 system("Pause");
                 Gtext.resize(i+1);
                 Gtext.at(i).set_in_datei(datei_abschnitt_buffer.c_str());          
             }
             datei_abschnitt.close();
        }
    }
}

Folgende weitere Fehlermeldungen erhalte ich von Dev c++:

Code:
C:\Dev-Cpp\include\c++\3.4.2\bits\ios_base.h In member function `std::basic_ios<char, std::char_traits<char> >& std::basic_ios<char, std::char_traits<char> >::operator=(const std::basic_ios<char, std::char_traits<char> >&)':

524 C:\Dev-Cpp\include\c++\3.4.2\bits\stl_algobase.h instantiated from `void std::fill(_ForwardIterator, _ForwardIterator, const _Tp&) [with _ForwardIterator = __gnu_cxx::__normal_iterator<TextObjekt*, std::vector<TextObjekt, std::allocator<TextObjekt> > >, _Tp = TextObjekt]'

291 C:\Dev-Cpp\include\c++\3.4.2\bits\vector.tcc instantiated from `void std::vector<_Tp, _Alloc>::_M_fill_insert(__gnu_cxx::__normal_iterator<typename _Alloc::pointer, std::vector<_Tp, _Alloc> >, size_t, const _Tp&) [with _Tp = TextObjekt, _Alloc = std::allocator<TextObjekt>]'

612 C:\Dev-Cpp\include\c++\3.4.2\bits\stl_vector.h instantiated from `void std::vector<_Tp, _Alloc>::insert(__gnu_cxx::__normal_iterator<typename _Alloc::pointer, std::vector<_Tp, _Alloc> >, size_t, const _Tp&) [with _Tp = TextObjekt, _Alloc = std::allocator<TextObjekt>]'

398 C:\Dev-Cpp\include\c++\3.4.2\bits\stl_vector.h instantiated from `void std::vector<_Tp, _Alloc>::resize(size_t, const _Tp&) [with _Tp = TextObjekt, _Alloc = std::allocator<TextObjekt>]'

412 C:\Dev-Cpp\include\c++\3.4.2\bits\stl_vector.h instantiated from `void std::vector<_Tp, _Alloc>::resize(size_t) [with _Tp = TextObjekt, _Alloc = std::allocator<TextObjekt>]'

123 C:\Dev-Cpp\bin\8\c\gegliedertertext.h instantiated from here

741 C:\Dev-Cpp\include\c++\3.4.2\bits\ios_base.h `std::ios_base& std::ios_base::operator=(const std::ios_base&)' is private

524 C:\Dev-Cpp\include\c++\3.4.2\bits\stl_algobase.h within this context
C:\Dev-Cpp\include\c++\3.4.2\streambuf In member function `std::basic_filebuf<char, std::char_traits<char> >& std::basic_filebuf<char, std::char_traits<char> >::operator=(const std::basic_filebuf<char, std::char_traits<char> >&)':

776 C:\Dev-Cpp\include\c++\3.4.2\streambuf `std::basic_streambuf<_CharT, _Traits>& std::basic_streambuf<_CharT, _Traits>::operator=(const std::basic_streambuf<_CharT, _Traits>&) [with _CharT = char, _Traits = std::char_traits<char>]' is private

524 C:\Dev-Cpp\include\c++\3.4.2\bits\stl_algobase.h within this context
 
Zuletzt bearbeitet:
Problem gelöst!!
Deine Vermutung war richtig. Es lag am Defaultkonstruktor. Ich hatte vergessen den Textbuffer zu leeren.

Vielen Dank für die Hilfe.
Gruß Ika
 
Zurück