dynamisches CString Array

Biergamasda

Erfahrenes Mitglied
hallo erstmal :)

also, ich habe vor, ein dynamisches Array von CStrings zu machen, nur tun sich dabei einige probleme auf, derer ich nicht gewachsen bin - denk ich :)

also..
Beschreibungen ist wie folgt definiert (CString* Beschreibungen;)
Code:
    help.Delete(help.GetLength()-1);                    
                    if(!counter)
                    {
                        Beschreibungen = new CString;
                        Beschreibungen[0] = help;
                    }
                    else
                    {
                        Beschreibungen = (CString*)realloc(Beschreibungen,(counter+1)*sizeof(CString*));
                        Beschreibungen[counter].Construct(new CString);
                        Beschreibungen[counter] = help;
                    }
                }


bis zum letzten befehl, also wo ich dem neu angelegten CString etwas zuweisen will haut alles hin, jedoch bekomm ich in dieser Zeile nen absturz - hoffe mir kann jemand weiterhelfen

PS:
help ist ein CString
 
Wie es aussieht, möchtest Du ein Array mit Zeigern auf CString einrichten. Was Du aber tust, ist im ersten Fall (!counter), daß du mit new einen Zeiger auf ein CString-Objekt erzeugst, aber kein einelementiges Array auf CString*. Da du den Zeiger mit dem []-Operator dereferenzierst, passiert da noch nichts.
Im zweiten Fall erzeugst du wieder einen Zeiger auf ein CString-Objekt, allerdings von der Größe (counter+1)*sizeof(CString*). Dann versuchst du, auf ein nicht existierendes Objekt zuzugreifen und dann kracht es natürlich.
Wozu gehört übrigens die 'Construct' Methode?

Ein dynamisches Array könntest du so erstellen:
Code:
 CString **Beschreibungen = NULL;
...
Beschreibungen = (CString**)realloc(Beschreibungen,(counter+1)*sizeof(CString*));
Beschreibungen[counter] = new CString;
*(Beschreibungen[counter]) = help;
...
Einfacher wäre es allerdings, wenn du die fertige CStringList verwenden würdest.
 
Warum verwendest du nicht die MFC Klasse CStringArray? diese ist quasi ein String-Array!!

@jokey2: Die vom Thread-Ersteller verwendete Klasse ist eine Klasse der MFC (-->Visual C++)
 
ok, ich werds mal so versuchen

das mitm konstruktor hat meines erachtens sinn :)
also, da ich ja - dachte ich jedenfalls - einen pointer auf einen CString erstelle
, und das mit realloc - welches nicht standardmäßig den Konstruktor aufruft, dachte ich, dass ich explizit noch einmal den Konstruktor aufrufen muss, da CString ja eine Klasse und kein "normaler" Datentyp ist.

lg

/edit
PS: die möglichkeit, einfach für den pointer ein new zu machen ist mir irgendwie nicht gekommen.. :)

/edit1
das mitm CStringArray Funktioniert Problemlos, danke fürn tipp
 
Zuletzt bearbeitet:
Zurück