006
29.05.2010, 12:34 Uhr
~jojo
Gast
|
Erstmal vielen Dank für die schnelle Antworten.
Leider kann ich die Grundstruktur des Programms nicht ändern, es wurde uns so vorgegeben und wir sollen es nur vervollstädnigen (ansonste bekomme ich unter Umständen Probleme mit den automatischen Tests).
Hier mal ein Beispiel mit dem geschilderten Problem (Includes etc. fehlen nur hier im Beispiel):
C++: |
SceneObjectList a; a = SceneObjectList::SceneObjectList(); for (int i = 0; i < 2; i++) a.add(SceneObjectFactory::createBlueSphere(Point(0,10,0),5)); //hier wird einfach ein element erzeugt und an die liste gehangen cout << "einfacher Add test bestanden" << endl; for (int i = 0; i < 10; i++) a.add(SceneObjectFactory::createBlueSphere(Point(0,10,0),5)); cout << "schwerer add test bestanden" << endl;
|
und hier mal noch der komplette Code der Klasse:
C++: |
SceneObjectList::SceneObjectList() : arraySize(2), numberElements(0), data(new SceneObject*[2]) { }
void SceneObjectList::add(SceneObject* object) { if (numberElements < arraySize) { data[numberElements] = object; numberElements++; } else { SceneObject** data2; data2 = new SceneObject*[arraySize*2]; for (int i = 0; i < (numberElements); i++) data2[i] = data[i]; delete[] data; data = data2; arraySize = arraySize*2; data[numberElements] = object; numberElements++; } }
int SceneObjectList::remove(SceneObject* object) { //mehr als ein element im Speicher? //Löschhen, alle nachfolgenden eins nach vorne kopieren return -1; }
SceneObject* SceneObjectList::getObject(int index) { if ((index > numberElements) || (index < 0)) return NULL; return data[index]; }
int SceneObjectList::count() { return numberElements; }
void SceneObjectList::clear() { numberElements = 0; }
SceneObjectList::~SceneObjectList() { for (int i = 0; i < (numberElements);i++) delete data[i]; delete data; data = NULL; }
|
Das delete Data nur den Zeiger löscht scheint unter der 2008 Visual studio version nicht mehr zu stimmen (sagte unser bremser), das wäre äquivalent zu delete[] Data (es macht auch keinen Unterschied.
mfg
Jojo
PS: das soll mal ein Raytracer werden, daher SceneObjectFactory etc...
Bearbeitung von 0xdeadbeef: |
cpp-Tag geradegezogen
|
Dieser Post wurde am 29.05.2010 um 12:47 Uhr von 0xdeadbeef editiert. |