Announcement

Collapse
No announcement yet.

Probleme mit der STL ->Vector

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Probleme mit der STL ->Vector

    Ich habe folgende Struktur:

    <pre>
    struct mp3info_str
    {
    long filegroesse;
    int mpeglayer;
    int bitrate;
    int mpegversion;
    int padding;
    int samplerate;
    int framerate;
    String interpret;
    String titel;
    TDateTime dauer;
    String id3tag;
    String filepath;
    };
    </pre>

    Versuche ich im laufendem Programm "filepath" zu belegen

    info.filepath=filename;

    kommt irgendwie die ganze Speicherverwaltung beim löschen der Objekte (Programmende) oder beim Aufruf von .clear durcheinander (ungültige Zeigeroperation in der Datei _construct.h). CodeGuard meldet ein Bad Memory Block. Dies ist merkwürdig, da man als Programmieren eigentlich mit der Verwaltung der STL-Objekte nix zu tun hat.

    Der Filename enthält Groß- und Kleinbuchstaben.

    Belege ich hingegen mit:

    info.filepath=filename.LowerCase;

    oder

    info.filepath=filename.Uppercase;

    läuft es einwandfrei und CodeGuard meldet auch keine Fehler.

    Was sein Bedeutung von dies??
    Christian

  • #2
    Hi,
    meiner erster Gedanke bei
    <blockquote style="color:green">info.filepath=filename;</blockquote>
    ist, daß der Speicher von Info nicht reserviert wurde.

    Wo und wie wurde Info reserviert

    Comment


    • #3
      Das kann eigetlich nicht sein

      vector<mp3info_str> mp3info; //global

      ....
      ...

      Function

      {

      mp3info_str tmpinfo;

      ...//füllen der Datenstruktur

      mp3info.push_back(tmpinfo);

      }

      Das funktioniert in anderen Programmen einwandfrei, da für die Reservierung die STL zuständig ist (dafür ist es ein Template)
      Christian

      Comment


      • #4
        Nur so ein paar wirre Gedanken :-)
        <p>Meinst du mit "String" den VCL-AnsiString? Der ist ja in Delphi referenzgezählt. Wenn das im C++-Builder auch so ist, könnte ich mir vorstellen, dass die Implementation von vector den Referenzzähler durch interne memmove's etc. durcheinanderbringt.
        <p>Ich entsinne mich da dunkel, dass es eine Liste von Eigenschaften gibt, die ein Datentyp haben muss, um in STL-Container gesteckt werden zu dürfen. std::auto_ptr z.B. ist <b>nicht</b> STL-Container-tauglich, vielleicht hat String dessen kritische Eigenschaften auch?
        <p>Ciao, Uli

        Comment


        • #5
          Tja, eigentlich lief es mit dem Typ immer. Er sollte dafür eigentlich geeignet sein.

          Erstaunlich ist doch, dass es mit Uppper & Lower funktioniert?
          Christian

          Comment


          • #6
            AnsiString scheint für vector geeignet zu sein, ein kleines Testprogramm mit BCB5 und eine kurze Suche mit groups.google.de zeigen das.

            Mir fällt dazu nichts konkretes ein.

            Mir ist es mal passiert, daß ich eine Exception abfangen wollte, Float-Dvision-By-Zero oder so in der Richtung und mein Projekt dann an beliebiger Stelle, an der ein Float zum Einsatz kam einfach abschmierte. Nachdem im Programm einmal durch 0 (float-Division) geteilt wurde, scheint mein Compiler nicht mehr richtig funktioniert zu haben und hat nur noch "Müll" produziert. Vielleicht geht es ja in diese Richtung

            Comment


            • #7
              Tja, Danke für die Müh
              Christian

              Comment

              Working...
              X