CString Pointer zweisen

Börni234

Grünschnabel
Hallo,
ich habe ein Problem, auf dem ich schon seit Stunden drauf rum kau ! Und langsam verlier ich die Nerven ! Ich hoffe ihr könnt mir helfen

Also folgendes:
Ich versuche einem einfachen CString Pointer (aus einer Verketteten Liste) einen String zu zuweisen, aber ich kriegs einfach nicht hin !

Codeausschnitt:

CString Temp = "Hallo";
Test *pA; // Structure mit einem CString Element (element)

A->element = Temp // klappt nicht
(*A).element = Temp // klappt auch nicht

Der Compiler meckert nicht, aber beim ausführen des Programms bleibt er hängen

Bitte helft mir

Grüße
Börni
 
Test *pA; // Structure mit einem CString Element (element)
Ausgerechnet die wichtigste Information, nämlich die Definition von Test, lässt du weg. Kannst du das nachreichen?

Zeigt der Pointer eigentlich auf irgendwas oder hast du ihn gar nicht initialisiert?
 
Also die Definition der Structure schaut so aus:

typedef struct _Test
{
CString element;
struct _Test *pElementV;
} Test;

Den Speicherplatz für den Pointer auf ein Listenelement (A) hab ich zuvor allociert.

A = (Test *) calloc (1,sizeof(Test)); // Speicher für neues Listenelement anlegen

Soll ne Verkettete Liste werden, wo ich CStrings für ne ComoBox abspeichere, nur leider steh ich bei Programmieren abundzu auf der Leitung! Muss wohl irgendwie mit dem allocieren des CStrings zu tun haben ! Habs auch schon mit realloc versucht
A = (Test *) realloc (A, (sizeof (Test)) )
aber des geht auch nicht

Grüße
Börni
 
Hab die Antwort mitlerweile selbst gefunden. Es lag irgendwie an dem calloc ! Hab jetzt new hergenommen und siehe da es funktioniert

Warum weis ich aber nicht. Würd mich aber intressieren !
Wenn es wer weis, dann bitte posten

Grüße
 
Code:
A = (Test *) calloc (1,sizeof(Test)); // Speicher für neues Listenelement anlegen
Das ist *ganz, ganz* böse, weil es zwar Platz reserviert, aber nicht den Konsturktor der Klasse und auch nicht den Konstruktor für CString aufruft. Somit erhältst du vollkommen uninitialisierten Speicher.

new ruft im Gegensatz zu calloc() den vom Compiler automatisch erzeugten Defaultkonstruktor der Test-Struktur auf und somit auch den des CString-Objekts. Somit ist dies korrekt initialisiert.

Am besten definierst du selber einen Konstruktor, der auch dafür sorgt, dass der Pointer auf ein anderes Test-Objekt korrekt mit Null initialisiert wird.
 
Am besten definierst du selber einen Konstruktor, der auch dafür sorgt, dass der Pointer auf ein anderes Test-Objekt korrekt mit Null initialisiert wird.
Stimmt.
Und du sowieso C++ programmierts, mach aus deiner Struct gleich eine Klasse mit vernünftigem Konstruktor (wie Kachelator sagte).

Gruß Homer
 
Danke !

Die Antwort kling logisch. Man merkt halt dass ich ein Anfänger bin! Aber solche Fehler macht man nur einmal

Grüße
 
Zurück