Fehlende Adressen nach Konstruktoraufruf
Von: Tobias O. (md_tobi@*kontra*spam*gmx.de) [Profil]
Datum: 19.06.2009 16:59
Message-ID: <7a1nm0F1t50bvU1@mid.dfncis.de>
Newsgroup: de.comp.lang.iso-c++
Datum: 19.06.2009 16:59
Message-ID: <7a1nm0F1t50bvU1@mid.dfncis.de>
Newsgroup: de.comp.lang.iso-c++
Hallo newsgroup,
ich habe mir eine Klasse geschrieben, in deren Konstruktor Instanzen
anderer Klassen erzeugt werden, und diesen daraufhin an einen Zeiger
zugewiesen werden.
GenerateVisual::GenerateVisual(string sDBName)
{
m_sDBName = sDBName;
[Diese hier: ]CTerzDdb* datenbank = new CTerzDdb(m_sDBName);
[Diese hier: ]const float* m_pfCenterFreqs
datenbank->GetCenterFrequencies(); // Uebergabe des Zeigers auf die
Terzfrequenzen
[Diese hier: ]vtkPolyData *data = vtkPolyData::New();
[Diese hier: ]vtkPoints *points = vtkPoints::New();
[Diese hier: ]vtkCellArray *polys = vtkCellArray::New();
[Diese hier: ]vtkFloatArray *scalars = vtkFloatArray::New();
m_iAuswahl = 0;
//(...)weitere Zuweisungen
m_z = 0.0;
m_iNumberofAzimuthElements = datenbank->GetPointsAzimuth()-1;
m_iNumberofElevationElements = datenbank->GetPointsElevation();
m_iNumberofElements = (m_iNumberofAzimuthElements *
(m_iNumberofElevationElements-2))+2;
[Diese hier: ]vector<vector<float> >
m_fCoordinationArray(m_iNumberofElements,vector<float>(3));
}
Nun habe ich ein Objekt dieser Klasse erstellt (In der Main-Funktion:
GenerateVisual *Generate3D = new GenerateVisual("testdatenbank.ddb");).
Der Konstruktor wird aufgerufen und allen Variablen wird der jeweilige
Wert zugewiesen. Die mit [Diese hier: ]-markierten Objekte werden
erzeugt und allen wird ein Bereich im Speicher zugewiesen.
Wenn der Konstruktor fertig ist und das Programm wieder in meine
Main-Funktion zurückkehrt, dann werden zwar die meisten Zuweisungen von
Generate3D übernommen, aber alle mit [Diese hier: ]-markierten werden
auf eine gleiche (falsche) Adresse (0xcdcdcdcd) gesetzt. Und ich kann
nicht mehr darauf zugreifen bzw. erhalte in anderen GenerateVisual
Memberfunktionen eine Zugriffsverletzung.
Warum werden die Adressen nicht an das Objekt "Generate3D" übergeben?
Ich habe irgendwie die Vermutung, dass die Zeiger nach dem Konstruktor
wieder gelöscht werden und daher die Zugriffsverletzung kommt.
Wie kann ich das Problem lösen??
Ciao Tobi
P.S.: Zugehörige header-file:
(...)
class GenerateVisual
{
public:
GenerateVisual();
GenerateVisual(string);
vtkPolyData *GetObject();
(...)
private:
string m_sDBName;
int ..., m_iAuswahl, m_iNumberofElements, m_iNumberofAzimuthElements,
m_iNumberofElevationElements;
double ..., m_z;
vector<float> m_vfTerzData; // pointer to data in database
vector<vector<float> > m_fCoordinationArray;
const float* m_pfCenterFreqs;
CTerzDdb* datenbank;
vtkPolyData *data;
vtkPoints *points;
vtkCellArray *polys;
vtkFloatArray *scalars;
GenerateVisual(const GenerateVisual&);
public:
~GenerateVisual(void);
(...)
[ Auf dieses Posting antworten ]Antworten
- Lars Tetzlaff (19.06.2009 20:20)
- Thomas Richter (21.06.2009 05:00)
- James (21.06.2009 20:14)
- Daniel_Krügler (22.06.2009 12:59)
- James (23.06.2009 09:32)
- Lars Tetzlaff (21.06.2009 19:44)
- Thomas J. Gritzan (21.06.2009 18:43)
- André Poenitz (19.06.2009 21:54)
- Tobias O. (22.06.2009 17:49)
- Torsten Robitzki (19.06.2009 22:06)
