Problem mit std::vector



  • Hallo, ein meiner Meinung nach komisches Problem:
    Wie kann ein vector eine size() von -1 enthalten ? Wie ist das möglich ?
    Selbst wenn er kein einziges Element hat dürfte die Größe ja wohl auf 0 fallen aber -1 ? Ist das vlt ein Fehlercode ? Ich glaube es ist nicht sehr sinnvoll nun den code zu posten da ich im mom selber nicht weiß wo das Problem liegt und ich den vector funktionen übergebe die dann wiederum was anderes mit dem vector machen .. den fehler hab ich daran gemerkt, dass auf einem ein "memory access violation" auftrat.. klar wenn man versucht ein object mit -1 size anzusprehcen ...

    Habt ihr ne Idee warum vector<int> Test;
    Test.size() = -1 ist ?!

    Gruß Chris



  • Dürfte nicht vorkommen. Ich tippe auf einen Fehler in deinem Code. Und ohne einen Ausschnitt mit dem man das reproduzieren kann, kann dir da wohl auch keiner helfen.



  • naja klar ist es iwo ein fehler in meinem code aber unterwelchen umständen kann denn test.size() == -1 sein ?! da begreife ich einfach nicht....

    hier kann ich mal das schema meines codes verdeutlichen:

    //pseudo 
    
    func1(vector<int> &v_int)
    {
        for(15 mal)
          v_int.push_back(for-index);
    }
    
    func2(vector<int> &v_int2)
    {
        func1(v_int2);
    }
    
    int main()
    {
       vector<int> i;
    
       func2(i);
    
       cout << i.size();
    }
    

    Ich kann mir das ehrlich gesagt auch nicht erklären ...



  • Welcher Compiler? Welche Std-Lib-Implementierung? Wird ja dann wohl eher dort der Fehler drin sein.



  • Bei mir funzt es. Schreibst du irgendwo evtl. außerhalb der Grenzen des Vektors herum?



  • #include <iostream>
    #include <vector>
    using namespace std
    

    compiler : Dev-C++

    Wie meinst du das außerhalb ?
    Meinst ob ich ein Element anspreche das nicht existiert oder meisnt du ob ich die capazität überschreite ?



  • Ist doch das gleiche. Gib doch einmal an allen möglichen Stellen die Größe des Vektors aus, dann findest du doch schnell die "böse" Stelle. Angefangen bei der Deklaration bis hin zu der jetzigen Ausgabe. Oder nimm einen Debugger...



  • ok werd ich machen .. mal sehen wer der übertäter ist xD

    danke



  • keine chance... die stelle die den fehler veruhrsacht hat nichts!! mit dem vector zu tun.. scheint ein ziemlich heftiger bug zu sein... wenn ich den vector mit einem iterator durchzähle läuft alles... und die size stimmt auch ... das is doch krank
    xD

    Gruß Chris



  • Foxx90 schrieb:

    ... die stelle die den fehler veruhrsacht hat nichts!! mit dem vector zu tun..

    Ist typisch.
    Oftmals merkt man gar nicht "vor Ort", wenn man "Löcher in den Speicher reisst", sondern erst wo ganz anders (bei uns sorgte mal ein fehlendes memset() dafür, dass in einem ganz anderen Modul ein printf() schief ging).

    Gruß,

    Simon2.



  • oh das ein beunruhigender gedanke xD 😉
    hmm.. naja ich werde mal weiter forsten...
    danke.. ich konnte mir nur nicht erklären wie die size von vector -1 sein kann xD

    meine vermutung war folgende:

    wenn ich eine referenz zu einem vector erstelle und dieses referenz nach verlasse3n des scopes zerstört wird... tritt ja der desstructor in spiel und weil die beiden vectoren ja durch eine referenz "verbunden" sind, dachte ich dass auch das andere object zerstört wird ...

    aber fehlanzeige mein beispiel code ob ging ja ..



  • Eine Referenz ist auch nur ein spezieller Pointer. Also keine Gefahr von wegen Destruktoren.


Anmelden zum Antworten