Zugriffsverletzung bei operator+



  • Hallo,
    ich versuche gerade mir eine eigene String-Klasse zu schreiben. Ich habe kein Ahnung warum, aber zur Laufzeit produziert das Programm immer einen Fehler:

    Das ist die Funktion:

    //Erstellt einen neuen String durch anfügen des rechten (rhs) an den linken
    String String::operator+(const String & rhs)
    {
        //gesamtlänge bestimmen (itsLen=Länge eines Strings, itsString= char * des strings)
        int totalLen=itsLen+rhs.GetLen();
        int i,j;
        //neuen String erstellen
        String temp(totalLen);
        //Strings zusammenfügen
        for (i=0;i<itsLen;i++)
        {
            temp[i]=itsString[i];
        }    
        for (j=0;j<rhs.GetLen();i++,j++)
        {
            temp[i]=rhs[j];
        }        
        temp[totalLen]='\0';
        return temp; //<-- Hier passiert der Fehler
    }
    

    Der Befehl ist eine einfache Anweisung "String1=(String2+String3);".. Den "operator=" habe ich bereits geschrieben und er funktioniert, aber bei "operator+" erhalte ich immer den gleichen Fehler 😕
    Lasse ich das Programm durchlaufen, gibt die Addition der Strings Null zurück, "String1" ist dann also einfach leer. Erst bei der Schrittweise-Fehlersuche erkennt er eine Zugriffsverletzung.

    Achja, Den temporären String erstelle ich so:

    //Privater Hilfs-Konstruktor
    String::String(int len)
    {
        itsString=new char[len+1];
        int i;
        for(i=0;i<=len;i++) 
        {
            itsString[i]='\0';
        }
    }
    

    Kann mir jemand helfen? 😞



  • Wie sieht der Copykonstruktor aus?



  • Hmm.. ich habe noch den Standardkopierkonstruktor... aaaach. Daran könnte es liegen!

    "itsString" ist ein char * ... dann brauche ich ja eine tiefe Kopie, nicht wahr?

    .. Werde das gleich mal testen!



  • Nein... funktioniert immer noch nicht:

    //Kopierkonstruktor
    String::String(const String & rhs)
    {
        itsLen=rhs.GetLen(); //Länge übernehmen
        itsString= new char[itsLen+1]; //Neuen String erstellen
        int i;
        //itsString übernehmen
        for (i=0;i<itsLen;i++)
        {
            itsString[i]=rhs[i];
        }
        itsString[itsLen]='\0';
    }
    


  • Dein "Hilfs-Konstruktor" initialisiert itsLen nicht.



  • Wwaaaaah 😡

    So simpel... ja das wars 😉 danke..


Anmelden zum Antworten