Riesen Problem mit char-Pointer. Bitte um Hilfe



  • Hallo an alle,
    ich stehe seit eingen Stunden vor folgenden Problem:
    Ich habe in einer Klasse einen public char-Pointer.

    class CMessdaten
    {
    public:
    char* speicher;
    void ReadLines();
    };
    

    In der gleichen Klasse befindet sich die public Methode ReadLines().
    In dieser Methode lese ich aus einer Datei sämtliche Zeilen aus die da drin stehen (meist so um die 300). Bei jedem auslesen hole ich mir wieder neuen Speicher mit new.
    Jedoch bekomme ich beim Auslesen ständig eine Fehlermeldung:
    Debug Assertion Failed!
    ...
    Expression: (string != NULL) || (count == 0)

    Wenn ich nun aber "char* speicher" aus der Klasse lösche und lokal in der Methode ReadLines() deklariere, klappt alles ohne Fehler. Ich kann mir auch den Inhalt (also alle ausgelesen Zeilen), welche auf dem Pointer abgelegt sind, anzeigen lassen. Nur halt wenn ich den Pointer wieder in der Klasse deklariere, bekomme ich wieder den Fehler.
    Kann mir jemand weiterhelfen? Ich weis absolut nicht mehr weiter...habe schon alles ausprobiert...aber es kommt immerwieder der gleiche fehler...
    Würde mich sehr freuen wenn jemand helfen kann!
    Vielen Dank!!



  • Erstmal mehr code zeigen.



  • Das ist der source der ReadMessdaten() Methode, char* speicher ist dabei in der Klasse (wie oben gezeigt):
    Lasst euch nicht an dem "bool ok" stören 🙂

    void CDlgChangeOneProtokoll::ReadMessdaten()
    {
      char  temp[255];
    
    char* buffer;
    
      int   len;  
      bool ok = false;
    
      while(!feof(protokoll))
      {
        fgets(temp,sizeof(temp),protokoll);
    
        len = strlen(temp);
    
        if (ok)
        {
        buffer = new char[strlen(speicher) + len];
        strcpy(buffer,speicher);
        strcat(buffer,temp);
        }
    
        if (!ok)
        {
          buffer = new char[len];
          ok = true;
          strcpy(buffer,temp);
        }
    
        strcat(buffer,"\0\n");
    
        speicher = new char[strlen(buffer)];
        strcpy(speicher,buffer);
      }
    
    }
    


  • dArIcO85 schrieb:

    buffer = new char[strlen(speicher) + len];
        strcpy(buffer,speicher);
        strcat(buffer,temp);
    

    hat es einen besonderen grund, warum du dich mit den c-routinen abplagst, statt std::string zu benutzen?



  • hat es einen besonderen grund, warum du dich mit den c-routinen abplagst, statt std::string zu benutzen?

    ja ist richtig, aber ich habe jetzt die methode schon 20 mal umgeschrieben, jetzt bin ich bei dieser variante hängen geblieben...

    aber es stürzt auch hier nur ab wenn der pointer speicher in der klasse steht...



  • dArIcO85 schrieb:

    hat es einen besonderen grund, warum du dich mit den c-routinen abplagst, statt std::string zu benutzen?

    ja ist richtig, aber ich habe jetzt die methode schon 20 mal umgeschrieben, jetzt bin ich bei dieser variante hängen geblieben...

    aber es stürzt auch hier nur ab wenn der pointer speicher in der klasse steht...

    dann versuchs noch ma mit std::string...
    so is ja grauenhaft
    btw: ma die memory-leaks gezählt? : D



  • kanns ja gerne noma versuchen, aber habe das ja auch schon alles durch 😞

    btw: ma die memory-leaks gezählt? : D

    lol....viel zu viele





  • das ist ja grausam.

    dArIcO85 schrieb:

    ja ist richtig, aber ich habe jetzt die methode schon 20 mal umgeschrieben

    Dann investiere ein wenig Zeit, und statt die Methode noch weitere 20 mal im Blindflug umzuschreiben (das was du da hast sieht nämlich nach rumprobieren und nicht nach wissen aus) informierst du dich über std::string, std::fstream, die nötigen getline-funktionen und schreibst das Ganze dann in ein bis zwei Versuchen richtig. Trial and Error ist der falsche Weg.


Anmelden zum Antworten