000
20.10.2003, 11:17 Uhr
~Craven
Gast
|
Servus.
Folgendes Problem: Ich habe eine Klasse als Datenbehälter gebaut, sprich sie besitzt als Attribut ein "void *", mit set- und get-Methoden. Dort werden unterschiedliche Werte eingetragen. D.h. mal
1. vector<float*> *valuefloat; 2. vector<CombinedDataTypeStruct*> *valuestruct; 3. float *f;
die dort eingetragen werden. Ich weis (durch Merken einer zusätzlichen Variable), ob es sich um 1,2 oder 3 handelt, caste es also hinterher entsprechend.
Bei normalen Floats (kein Vector!) habe ich keine Probleme, nur sobald ich z.B. 512 mal CombinedDataTypeStructs in den Vector packen will (Combined..Struct beinhaltet wiederum zwei void*, normalerweise Zeiger auf float und int) ... scheint das Programm Amok zu laufen und stürzt regelmäßig mit "Speicherzugriffsfehler" ab. Muss ich unter Linux (bitte nicht wieder in das Linux-Board verschieben ) da irgendwie noch was mit der Speicherverwaltung beachten??
Zum besseren Verständnis (das Programm ist ca. 5000 Zeilen lang, wäre also etwas zu viel, um es zu posten): Klasse A erzeugt mit new die oben genannten Structs, mit new werden auch Zeiger auf floats und ints gesetzt, die Zeiger im Struct belegt, dann entsprechend in einen (mit new erzeugten) Vector gepackt und der Zeiger an die Klasse B (Datenbehälter) mit setData(void* data) übergeben. Wichtig dabei: Von Klasse A wird keines der erzeugten Objekte mit delete gelöscht!! Das erfolgt in Klasse C, die die Daten wieder herausholt. Zum einen ist dann der Vector wesentlich größer geworden (5131 oder so, anstelle von 512; beim Abfrage der Vectorlänge in der set-methode ist die Länge noch in Ordnung, auch die Belegung des Attributs in der Klasse, bei der get-Methode nicht mehr) .... und dann stürzt das Programm an Stellen ab, an denen es nicht abstürzen dürfte. Das ganze läuft in einer statischen Lib ab. Ich vermute da irgendwo Probleme mit der Speicherverwaltung, bin mir aber nicht sicher.
Ich hoffe, ich habe das halbwegs verständlich rüberbringen können. Hat einer eine Ahnung, wo das Problem liegt? |