012
31.05.2005, 15:01 Uhr
Lumina
|
Also, das ist meine Klasse:
C++: |
// Definition der Klasse CString
#ifndef CSTRING_H #define CSTRING_H
#include <iostream.h>
class CString { public: CString(); // Standardkonstruktor CString(const char*); // Typumwandlungskonstruktor CString(const CString&); // Copy-Konstruktor ~CString(); // Destruktor
// Operatoren: //operator const char* () const { return(str);} // Typkonvertierungs- // operator; verträgt sich nicht // mit Indexoperator!
CString& operator=(const CString&); // Zuweisungen CString& operator=(const char*); friend ostream& operator<<(ostream&, const CString&); // Ausgabe
// Indexoperator char& operator[](unsigned);
int mystrlen(const char*); int CStringLen();
void CStringCat(CString&); // FEHLERHAFT!!!
void removeSpaces(); CString trim(); char& charAt(unsigned);
private: char* str; // Zeiger auf Stringanfang unsigned len; // enthaelt Stringlaenge };
#endif
|
Hier ein Ausschnitt aus CString.cpp:
C++: |
/******************************************************* * Methode: CStringCat * Zweck: Hängt alle Zeichen des CString-Objekts src * an das aktuelle CString-Objekt an. *******************************************************/ void CString::CStringCat(CString& src) {
// Anfänge merken: char* this_start = str; char* src_start = src.str;
// neue Zeichenkette anlegen: char* tmp = new char[mystrlen(str) + mystrlen(src.str) + 1];
// Anfang der neuen Zeichenkette merken: char* tmp_start = tmp;
// Zeichenketten in neue kopieren: for (; *str; str++, tmp++) { *tmp = *str; }
while (*tmp++ = *src.str++);
*tmp = 0; // Nullterminierung setzen
// Auf Anfänge zurücksetzen: str = this_start; src.str = src_start; tmp = tmp_start;
delete [] this->str; str = tmp; // Neue Zeichenkette zuweisen len = mystrlen(str); }
|
Hab schon stundenlang debugged, komm aber einfach nicht drauf, woran es liegt, dass ich bei CStringCat eine Meldung bekomme:
Debug Error! Program: ... \uebungString.exe DAMAGE: after Normal block (#60) at 0x003227F8 (Please retry to debug the application)
Der Destruktor kann meine CString-Objekte nur freigeben, wenn der Zeiger auch wirklich am Anfang der Zeichenkette steht, aber das tut er doch, oder nicht?! Es wird ja sogar das richtige ausgegeben in meinem Testprogramm. Aber bei der letzten { im main kommt die obige Meldung... Was ist also falsch?!
removeSpaces funzt und taugt mir so, wie ichs schon mal gepostet hab, danke trotzdem. -- ******************************************* Willst du glücklich sein im Leben, trage bei zu and'rer Glück, denn die Freude, die wir geben, kehrt ins eig'ne Herz zurück! ******************************************* |