1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

Komischer Fehler - sucht nach einem helfenden Loeser !!!

  • Raute50
  • 5. September 2007 um 20:22
  • Unerledigt
  • Raute50
    3
    Raute50
    Mitglied
    Punkte
    50
    Beiträge
    7
    • 5. September 2007 um 20:22
    • #1

    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;
    Alles anzeigen

    liefert folgende Ausgabe :

    Zitat


    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

    Alles anzeigen

    scheint also alles geklappt zu haben .... dagegen geht es beim DreifachVektor leider nicht ! :frowning_face:

    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

  • josef19
    9
    josef19
    Mitglied
    Reaktionen
    9
    Punkte
    749
    Beiträge
    135
    • 5. September 2007 um 21:19
    • #2

    Habs nur überflogen:

    Wie ist die Methode definiert:

    Code
    the_vec.push_back(tempvek);

    Wie wird tempvek in der Methode verwendet ? (byVal|byRef)

    Warum einfach, wenns kompliziert geht ! USB-CD-ROM mit USB-Stick emulieren

  • Raute50
    3
    Raute50
    Mitglied
    Punkte
    50
    Beiträge
    7
    • 6. September 2007 um 10:19
    • #3

    http://www.cplusplus.com/reference/stl/vector/push_back.html

    Erstellt eine Kopie von tempvek und haengt sie dem Vektor the_vec an ....

    #50

  • CornedBee
    2
    CornedBee
    Mitglied
    Punkte
    30
    Beiträge
    6
    • 6. September 2007 um 20:24
    • #4
    Code
    while (dasfeld[lambda2] < pivot_elem) {
                        lambda2++;
                        zaehler++;                    
                    }


    Hier in der Sortierungsfunktion läuft dir das lambda2 davon.

    All the buzzt
    CornedBee :face_with_rolling_eyes:

  • Maximilian Rupp 27. Dezember 2024 um 12:04

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!

Benutzerkonto erstellen Anmelden

Benutzer online in diesem Thema

  • 3 Besucher

Rechtliches

Impressum

Datenschutzerklärung