C++ Destruktor fuehrt zu Segfault

Hallo Experten,

ich grueble jetzt schon einige Stunden ueber einem anscheinend
simpel zu behebenden Problem. Ich sehe einfach den Fehler
nicht, kann mir evtl. jemand helfen? Also ich habe untiges
Programm geschrieben und es ist mir immer abgesemmelt, also
debugger anwerfen und rausfinden warum. Festgestellt habe ich,
das der SegFault im Destruktor passiert, aber IMHO hab ich
eigentlich alles richtig geschrieben, oder doch nicht?

/\*Uebung 11 Zeichenkette\*/

#include 
#include 

class zeiket
{
 public:
 zeiket(unsigned int);
 ~zeiket();
 int put\_zk(char \*);
 char \*get\_zk(void);
 int status(void);
 private:
 static long int reserviert;
 int anzahl;
 char \*charfeld;
};

long int zeiket::reserviert = 0;

zeiket::zeiket(unsigned int ueber\_anzahl = 1)
{
 anzahl = ueber\_anzahl;
 char \*charfeld = new char[ueber\_anzahl];
 if(charfeld == NULL)
 {
 coutanzahl)
 {
 return 0;
 }
 else
 {
 strcpy(charfeld,kette);
 cout

Hallo!

Du hast in der Klassen deklaration char *charfeld stehen, also diese Variable schon angelegt, im Konstruktor legst du noch eine weitere Variable an mit char *charfeld = new char[ueber_anzahl];
Die eine am Heap, die andere am Stack.
Könnte das die Ursache sein??
Gibt der Compiler keine Warnung aus?
Probier doch mal nur
charfeld = new char[ueber_anzahl]; im Konstuktor, Gruß Pauli

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo!

Du hast in der Klassen deklaration char *charfeld stehen, also
diese Variable schon angelegt, im Konstruktor legst du noch
eine weitere Variable an mit char *charfeld = new
char[ueber_anzahl];
Die eine am Heap, die andere am Stack.
Könnte das die Ursache sein??
Gibt der Compiler keine Warnung aus?
Probier doch mal nur
charfeld = new char[ueber_anzahl]; im Konstuktor, Gruß Pauli

Hallo Pauli,

vielen Dank fuer Deine Hilfe! Mir war nicht bewußt, daß ich die
Variable zweimal initialisiere…aber wundern tut es mich
schon, daß der GCC da nicht ein wenig rummeckert…schließlich
habe ich das Teil ja mit -Wall kompiliert, also sollte sowas
eigentlich schon auffallen. Anyway, Dank Deiner Hilfe
funktioniert das Teil und ich habe jetzt eben einen großen
Aha-Effekt gehabt und C++ wieder ein wenig mehr verstanden!

Gruß Micha

Hallo Micha,

vielen Dank fuer Deine Hilfe! Mir war nicht bewußt, daß ich
die
Variable zweimal initialisiere…aber wundern tut es mich
schon, daß der GCC da nicht ein wenig rummeckert…schließlich
habe ich das Teil ja mit -Wall kompiliert, also sollte sowas
eigentlich schon auffallen. Anyway, Dank Deiner Hilfe
funktioniert das Teil und ich habe jetzt eben einen großen
Aha-Effekt gehabt und C++ wieder ein wenig mehr verstanden!

Du initialisierst die Variable nicht zweimal.
In der urspruenglichen Version wurde eine lokale Variable
angelegt, die nur innerhalb des Konstruktors gueltig ist.
Diese hat nichts mit der Klassenvariablen zu tun (bis auf
den Namen). Das haette durchaus Absicht sein koennen.
Daher ist das auch kein Fehler den gcc erkennen koennte.

MfG

Richard