Array von CObjecten erweitern!



  • Hallo,
    kann ich ein Array von CObjecten das ich mit z.B. 100 initialisiert habe, erweitern, auf 200 oder eine andere Grösse??

    CMyObject myOb[100]; // CMyObject ist von Typ CObject
    // hier myOb erweitern auf 200!
    

    lg
    pixel



  • pixel schrieb:

    Hallo,
    kann ich ein Array von CObjecten das ich mit z.B. 100 initialisiert habe, erweitern, auf 200 oder eine andere Grösse??

    CMyObject myOb[100]; // CMyObject ist von Typ CObject
    // hier myOb erweitern auf 200!
    

    lg
    pixel

    Gar nicht. Arrays sind in der Größte festgelegt. Entweder du allokierst es dynamisch mit new [] und löschst es mit delete [] oder (besser) du verwendest die Container der STL, wie z.B. std::vector, den kannst du über std::vector::resize in der Größe anpassen.

    MfG

    GPC



  • Hi,
    danke für die schnelle Antwort!

    lg
    pixel



  • hi,
    ok, ich würde auch ohne dies auskommen, aber ich muß das Array irgendwie zurückgeben, an ein anderes, mit return oder ähnliches!

    Ich hab das so probiert:

    // Globaler vector der den Inhalt aufnehmen soll
    CVector* globalVector;
    int sort(CMapStringToOb& cMapStringToOb)
    {
    	int n = cMapStringToOb.GetCount();
    
    	CVector* vector = new CVector[n]; // dieser Vector muß zurückgegeben werden 
    	/*
    	jetzt wird in einer schleife der vector mit den inhalten aus der cMapStringToObject 
    	gefüllt und dann sortiert
    	*/
    	while(p != NULL)
    	{
    		cMapStringToOb.GetNextAssoc(p, cstring, (CObject*&) cObject);
    		vector[i].cstring = cstring;
    		vector[i].csname = cObject->csname;
    		//myGlobalVector[i].csUrl = (CString&)csUrlTmp;
    
    		i++;
    	}
    	// nach dem füllen, wird der vector hier sortiert mit qsort();
    	qsort(vector, n, sizeof(CVector), sort_by_string);
    	// wie den vector zurückgeben ohne Fehler?
    
    	globalVector = vector; // bis hier ist ok, globalVector hat den sortierten inhalt aus vector
    	delete[] vector; // hier verliert auch der globaler Vector(globalVector) die Daten!
    
    	return 0;
    }
    

    wie kann ich den vector übergeben das bei delete die inhalte nicht verloren gehen?? 😕

    lg
    pixel



  • Lass das delete[] an dieser Stelle weg. Du solltest delete erst dann aufrufen, wenn du den benutzten Speicher nicht mehr benötigst (das heißt in deinem Fall vermutlich: irgendwo im Hauptprogramm).

    PS: Eine bessere Lösung wäre es hier übrigens, einen std::vector zu verwenden (oder zumindest einen Smart-Pointer ala boost::shared_array).


Anmelden zum Antworten