Results 1 to 8 of 8

Thread: C++ stl

  1. #1
    Master
    Join Date
    Oct 2010
    Posts
    124
    Thanks
    22
    Thanked 10 Times in 9 Posts

    C++ stl

    Hi,

    Ich habe eine Frage zur STL - speziell zur vector Klasse:

    Ich möchte die vector Klasse dazu benutzen, um meine Vertex-Attribute zu speichern. Ich erzeuge einen vector mit
    Code:
    std::vector positions;
    und füge anschließend mit
    Code:
    positions.push_back(e);
    neue Elemente hinzu. Wenn ich mir nach dem ersten push_back() die Anzahl der Elemente des vectors im Debugger ansehe, bekomme ich nicht 1 sondern irgendeine große Zahl (z.B. 4294867666) ...

    Ich hoffe einmal, dass ich die vector Klasse falsch verwende - sonst habe ich nämlich keine Ahnung warum dieses Problem auftritt...

    Bitte um Hilfe ... :-/
    Danke!

    -------------------
    Christoph

  2. #2
    Baccalaureus
    Join Date
    Mar 2009
    Posts
    733
    Thanks
    20
    Thanked 157 Times in 141 Posts
    Hallo,

    Mit der size() Methode bekommst du die Anzahl der Elemente zurück. Der Vektor wird aber intern nicht bei jedem einfügen größer, sondern reserviert immer etwas mehr Elemente vor. Wenn der Vector voll ist wird er dann automatisch um einige Elemente erweitert. Daher wirst du im Debugger mehr Elemente angezeigt bekommen als wirklich drin sind. Details zur Vector Klasse findest du hier.
    Bernhard Steiner
    [ECG & RTR Übungsleitung]

  3. #3
    Master
    Join Date
    Oct 2010
    Posts
    124
    Thanks
    22
    Thanked 10 Times in 9 Posts
    Quote Originally Posted by BDL! View Post
    Hallo,

    Mit der size() Methode bekommst du die Anzahl der Elemente zurück. Der Vektor wird aber intern nicht bei jedem einfügen größer, sondern reserviert immer etwas mehr Elemente vor. Wenn der Vector voll ist wird er dann automatisch um einige Elemente erweitert. Daher wirst du im Debugger mehr Elemente angezeigt bekommen als wirklich drin sind. Details zur Vector Klasse findest du hier.
    Lt. http://www.cplusplus.com/reference/stl/vector/size/ :
    This is the number of actual objects held in the vector, ...
    EDIT: Ok, irgendwas stimmt mit meinem VC Debugger nicht... Wenn ich mir den Wert ausgeben lasse, kommt ein vernünftiger Wert raus:

    Click image for larger version. 

Name:	Screen.png 
Views:	49 
Size:	22.2 KB 
ID:	20642
    Last edited by .chris.; 10-04-2012 at 00:18.

  4. #4
    Master
    Join Date
    Nov 2009
    Location
    Vienna
    Posts
    150
    Thanks
    4
    Thanked 31 Times in 30 Posts
    edit: Beitrag removed
    Florian Schober
    [EVC Tutor, ECG-UE Tutor, CG-UE Tutor, RTR Tutor]

  5. #5
    Master
    Join Date
    Oct 2010
    Posts
    124
    Thanks
    22
    Thanked 10 Times in 9 Posts
    Sorry für den etwas vorschnellen Forum-Post, aber ich dachte nicht das ein Debugger falsche Werte anzeigen kann!...
    Danke,
    ----------
    Christoph

  6. #6
    Veteran
    Join Date
    Mar 2012
    Posts
    6
    Thanks
    0
    Thanked 2 Times in 2 Posts
    Quote Originally Posted by .chris. View Post
    Sorry für den etwas vorschnellen Forum-Post, aber ich dachte nicht das ein Debugger falsche Werte anzeigen kann!...
    Danke,
    ----------
    Christoph
    Auch wenn es mittlerweile vermutlich keine Rolle mehr spielt:
    War es ein Debug- oder ein Release-Build?

  7. #7
    Master
    Join Date
    Oct 2010
    Posts
    124
    Thanks
    22
    Thanked 10 Times in 9 Posts
    Quote Originally Posted by Thopthes View Post
    Auch wenn es mittlerweile vermutlich keine Rolle mehr spielt:
    War es ein Debug- oder ein Release-Build?
    Hi!

    Ein Debug-Build ... Den Release-Build hab ich noch gar nicht versucht zu debuggen. Entwickle mit dem Debug-Build.

  8. #8
    Baccalaureus
    Join Date
    Mar 2007
    Posts
    518
    Thanks
    13
    Thanked 62 Times in 59 Posts
    es könnte sein, dass es ein signed/unsigned int Problem ist. Wenn du den vector nach der Größe Fragst, bekommst du einen Wert vom Typ size_t zurück. size_t ist unsigned. Vielleicht interpretiert der variable watcher den Typ einfach falsch (also als signed int).

    Ähnliche Probleme kann man auch mit GL calls bekommen, die unsigned ints zurückgeben. Der Compiler regt sich nicht auf wenn man den Wert einem signed int zuweist, aber das Ergebnis ist dann einfach falsch. Also aufpassen und genau schauen welcher Typ gefragt ist.
    Simon Wallner
    CGUE, EVC Tutor, former RTR, ECG, CG1, CG2, TIL Tutor

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •