Zitat von
locus vivendi
Warum initialisierst du ein statisches Element im Konstruktor?
Das ist vielleicht nicht der beste Stil, aber für das Programm im Prinzip egal soweit ich das sehe, da nur eine Methode folgt die diese Variable benutzt.
Zitat von
locus vivendi
Du hast zu wenig Code gepostet um eine sichere Aussage treffen zu können. Vermutlich erzeugst du erst ein CMOKEAUSWERTData Objekt und dann ein weiteres. Später wird das erste Objekt abgebaut. Der Destruktor löscht den Speicher auf den das statische Element CMOKEAUSWERTData::curve zeigt. Dieses wird dadurch ungültig. Dann wird das zweite Objekt abgebaut, diesmal trifft der Destruktoraufruf auf den ungültigen Zeiger und du bekommst die Meldung die du genannt hast.
Wie schon erwähnt benutze ich CMOKEAUSWERTData nur als virtuelle Klasse. Von der abgeleiteten Klasse erzeuge ich ein Objekt, rechne damit und lösche es wieder. Danach wird ein neues Objekt erzeut. Code:
Code:
for(int i=0;i<=36;i++){
filename = HOME + "/daten/moke/" + sample_name + "/" + sample_name + itos(i) + ".dat";
commandline = "dos2unix " + filename + "\n";
system(commandline.c_str());
CCalculate *hysteresis = new CCalculate();
(*hysteresis).read(filename);
(*hysteresis).setPhi(i*10);
output<<(*hysteresis).calculate();
delete hysteresis;
}
CCalculate ist dabei die abgeleitete Klasse.
Lesezeichen