D
Hi,
also erst einmal bin ich überrascht, daß das alles überhaupt funktioniert (wieder was gelernt). Eine Lösung habe ich nicht, nur zwei Alternativen.
Ich würde vermutlich eine Liste von StringListen verwenden. Damit würde auch das teure Kopieren in der Methode btnEnterClick vermieden werden:
TList* nameL(NULL); //Liste von StringListen
TStringList* strL(NULL);
try
{
nameL = new TList;
//4 StringListen hinzufügen
for (int i = 0; i < 4; i++)
{
nameL->Add(new TStringList);
}
//2 Strings in die 3. Liste - also quasi die
//Elemente [2][0] und [2][1] anlegen
strL = (TStringList*)nameL->Items[2];
strL->Add("r2d2");
strL->Add("c3po");
//Auslesen des Strings [2][1]
String s = ((TStringList*)nameL->Items[2])->Strings[1];
//mal eben ein paar Dimensionen verändern
((TStringList*)nameL->Items[1])->Add("gaga"); //[1][0] dazu
nameL->Add(new TStringList); //[4][] dazu
((TStringList*)nameL->Items[2])->Delete(1); //[2][1] weg ("c3po")
}
__finally
{
//wieder brav aufräumen
if (nameL != NULL)
{
while (nameL->Count > 0)
{
delete (TStringList*)nameL->Items[0];
nameL->Delete(0);
}
delete nameL;
nameL = NULL;
}
}
Natürlich gehört das alles noch in eine Klasse, um die umständlichen Zugriffe zu Kapseln und ein Zugriff über den Index-Operator zu ermöglichen ...
Als weitere Alternative würde sich noch <vector> aus der STL anbieten:
#include <vector>
//...
using namespace std;
vector<vector<String> > m(3, vector<String>(5));
m[0][1] = "Hallo";
String x = m[0][1];
666Blade[DC]666 schrieb:
void __fastcall TForm1::btnEnterClick(TObject *Sender)
{
//...
Namen = new AnsiString[Save[0].ToInt() + 1];
Das riecht nach memory leak, bin mir aber nicht sicher.