Announcement

Collapse
No announcement yet.

C++ stl

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new 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
    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
    [CGUE Übungsleitung]

    Comment


    • #3
      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:	1
Size:	22.2 KB
ID:	1237073
      Last edited by .chris.; 09-04-2012, 23:18.

      Comment


      • #4
        edit: Beitrag removed
        Florian Schober
        [EVC Organisation, ECG-UE Tutor, CG-UE Tutor, RTR Tutor]

        Comment


        • #5
          Sorry für den etwas vorschnellen Forum-Post, aber ich dachte nicht das ein Debugger falsche Werte anzeigen kann!...
          Danke,
          ----------
          Christoph

          Comment


          • #6
            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?

            Comment


            • #7
              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.

              Comment


              • #8
                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

                Comment

                Working...
                X