Arrays von Pointer dynamisch erzeugen



  • Hi Leuts, ich hab ein Problem mit dem dynamischen Erzeugen von Pointerarrays deren Größe erst zur Laufzeit feststeht.
    Bisher benutze ich folgenden Code, der auch einwandfrei funktioniert:

    void MyClass::ExportGridToXml(wxString strFile)
    {
    	TiXmlDocument doc;
    	int n = m_grid1->GetNumberRows();
    	TiXmlElement *XmlMainNode;
    	TiXmlElement* DataSet[40];
    	TiXmlElement* Data[40][5];
    	TiXmlText* XmlTxt[40][5];
    	int i,j;
    	wxString str;
    
    	TiXmlDeclaration * decl = new TiXmlDeclaration( "1.0", "", "" );
    	XmlMainNode = new TiXmlElement("Batterieladeprotokoll");
    
    	for (i=0;i<n;i++)
    	{
    		Data[i][0] = new TiXmlElement("A");
    		Data[i][1] = new TiXmlElement("B");
    		Data[i][2] = new TiXmlElement("C");
    		Data[i][3] = new TiXmlElement("D");
    		Data[i][4] = new TiXmlElement("E");
    
    		for (j=0;j<5;j++)
    		{
    			str = m_grid1->GetCellValue(i,j);
    			XmlTxt[i][j+1] = new TiXmlText(str);
    			Data[i][j+1]->LinkEndChild(XmlTxt[i][j+1]);
    			DataSet[i]->LinkEndChild(Data[i][j+1]);
    		}
    		XmlMainNode->LinkEndChild(DataSet[i]);
    	}
    	doc.LinkEndChild( decl );
    	doc.LinkEndChild(XmlMainNode);
    	doc.SaveFile(strFile);
    }
    

    Nun habe ich das Problem, das die 40 sich ändert, d.h. die Arraygröße ändert sich zur Laufzeit. Den Ausdruck

    TiXmlElement* DataSet[40];
    

    durch

    TiXmlElement**DataSet = new TiXmlElement*[n];
    

    kriege ich ja noch gebacken. Problematischer wirds bei den Variablen Data und XmlText, obwohl die 5 konstant bleibt. Kann mir jemand helfen ? Danke....


  • Mod

    Ganz einfach: Nimm std::vector. Alle Probleme gelöst.



  • Habe ich noch nie benutzt 🙂 Aber hört sich interessant an, mal ein wenig einlesen



  • Anyway, eine Lösung habe ich, ich Blödfön 🙂
    Da die Strukturen ja direkt verlinkt werden, kann ich die Zeiger nach dem Verlinken direkt mit neuen Strukturen überschreiben :-))) Wieso also die ganzen Arrays überhaupt ? Geht mit einfachen Pointern viel einfacher......
    Trotzdem Danke für den Hinweis .........


Anmelden zum Antworten