Hi ho ...

als erstes moechte ich noch erwaehnen, dass ich hier zwar viel geschrieben habe, das Problem aber eher komisch als kompliziert ist !!!


Habe ein komisches Problem! Habe mir eine Sortierungsklasse geschrieben ( nix besonderes ). Desweiteren habe ich mich die Klassen DoppelVektor und DreifachVektor geschrieben, die als Eintrag 2 bzw. 3 Zahlen ( long ) beinhalten..

Ich lese ein Mal Zweier-Paare aus einer Datei ein und speichere sie in einem vector < DoppelVektor > und will sie dann sortieren => Klappt!

Habe ich dagegen Dreier-Paare in einem vector < DreifachVektor > gespeichert und moechte diese sortieren => Abbruch !
gdb liefert folgende Zeile: Program received signal SIGSEGV, Segmentation fault.

im Code konnte ich es m.E. auf folgende Zeile eingrenzen :

Code:
while (dasfeld[lambda2] < pivot_elem) ( ... tue geeignetes ... )
... dabei ist das pivot_elem durch einen Kopierkonstruktor in's Leben gerufen worden :
Code:
T pivot_elem( dasfeld[pivot_ind]);
dasfeld ist vom Datentyp vector und beinhaltet entweder DoppeltVektor-Eintraege oder DreifachVektor-Eintraege, je nachdem, was ich halt sortieren moechte.
Bei beiden KLassen habe ich KEINEN [] Operator!
Laut gdb ist der <-Vergleich der Ausloeser ,,, aber ich tippe eher auf einen Zusammenhang im Bezug auf den []-Operator

Die Sortierungsklasse hat folgende Parameter:
Code:
template <class T> class sorter {
	private:
		vector <T> dasfeld;
		long laenge;
	public:
		... halt Funktionen und so'n Zeugs ...
}
Die Aufrufe laufen also wie folgt ab :
Code:
sorter <DoppelVektor> thesorter(the_vec, the_vec.size());
wobei the_vec vom Datentyp vector ist und
Code:
sorter <DreifachVektor> pkq_sort ( pkq , pkq.size());
wobei pkq vom Datentyp vector ist.


Ein paar Textbeispiele sind :
Code:
	vector <DoppelVektor> the_vec;
	long eins, zwei;
	ifstream auslesen;
	auslesen.open("./temp.txt", ios::in);
	bool lies_weiter = true;
	long stamplen;

	long uu = 1;
	long anzahl_von_gelesenen_stamps = 25; // OBACHT temporaere Variable
	// ...damit die ersten Listen nicht zu lang sind
		
	// lese solange weiter ein, solange sinnvolle Stamps und zugehoerige Primzahlen existieren
	while ( lies_weiter ){
		uu++;
		auslesen >> eins >> zwei;
		if ( eins == 0 ) 
			lies_weiter = false;
		else {
			// zum Vergleich mit anderem Programm folgende If-Bedingung eingebaut
			if (  eins <= 722111111  ) {
				if ( uu > 0 ) {
					cout << "Zum ersten Mal bei Nr " << uu << endl;
					uu = 0;
					cout << zwei << endl;
					cout << eins << endl;
				}
				DoppelVektor tempvek ( zwei , eins);
				the_vec.push_back(tempvek);
				uu -= 2 ;
				if ( uu < -anzahl_von_gelesenen_stamps )
					lies_weiter = false;
				cout << "uu = " << uu << endl;
			}
	
		}
	
	}
	sorter <DoppelVektor> thesorter(the_vec, the_vec.size());
	thesorter.dump2(); // unsortierte Ausgabe
	cout << "*" << endl;
	thesorter.sort(0, thesorter.get_laenge()-1, false);
	cout << "*" << endl;
	thesorter.dump2(); // sortierte Ausgabe
	return 0;
liefert folgende Ausgabe :
Zum ersten Mal bei Nr 358
2147418001
433101011
uu = -2
...
uu = -26
SORTER DUMP 2 ( hier nur ein Auszug : )
Stamp = 433101011 und Wert = 2147418001
Stamp = 643011001 und Wert = 2131272001
Stamp = 122201111 und Wert = 2129522851
...
Stamp = 343200011 und Wert = 1734453001

*
*
SORTER DUMP 2 ( hier nur ein Auszug : )
Stamp = 721200111 und Wert = 2096760961
Stamp = 721111110 und Wert = 1862340481
Stamp = 711011111 und Wert = 2039706241
Stamp = 701211011 und Wert = 1959717761
Stamp = 643011001 und Wert = 2131272001
...
Stamp = 122201111 und Wert = 2129522851
scheint also alles geklappt zu haben ....

dagegen geht es beim DreifachVektor leider nicht !


Kann mir einer erklaeren, woran das liegen kann ???

Habe ein kleines Beispielprogramm dazu auf DIESER Seite hinterlegt!

Ich waere euch ECHT dankbar, wenn ihr mir hilfreiche Kommentare geben koenntet !!!


Schoenen Abend noch !

#50