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