*DRINGEND* Aus Klasse heraus in privates Struct der selben Klasse schreiben
-
Okay, ich habe hier ein kleines bis mittelschweres Problem, evtl. auch ein größeres *g*
Ich habe ein struct, wie folgt definiert:
typedef struct { FILE* fp; char* path; bool append; bool isActive; } LogStruct;
Dann erzeuge ich in einer Klasse einen Pointer auf das Struct,...
private: LogStruct* log;
...anschließend erzeuge ich mit einer Member-Funktion der Klasse quasi ein Array aus diesen Structs...
log = (struct LogStruct*)malloc((MAX_LOG_HANDLERS-1) * sizeof(LogStruct));
und "versuche" dann mit einer anderen Member-Funktion in das Struct zu schreiben, bspw.:
this->log[index].fp = sf_fopen("log/sys.log", 3);
Und exakt da liegt mein Problem, nämlich verursacht der Code einen Absturz... auf das sf_fopen isses nicht zu schieben, die Funktion funzt (welch Wortspiel *g*). Was mache ich falsch?!?!?
Thx im voraus,
k3rn3lpanic
-
Was mache ich falsch?!?!?
das lässt sich ohne weiteres nicht sagen, hast du mal ein Debugger benutzt? Ist index vielleicht ausserhalb des Bereichs?
Ansonsten kann man nur sagen, dass du malloc in C++ nicht mehr verwenden solltest und unter C++ sollte man auch nach möglichkeiten die neuen Streams benutzen, da diese doch komfortabler sind
http://www.c-plusplus.net/forum/topic,39469.html
http://www.schornboeck.net/ckurs/alloc.htm
-
Habs mitm Debugger vom VS.NET probiert, der meinte das Problem liegt irgendwo im linken Teil des Statements, werds aber gleich nochma mitm intel-Debugger testen...
-
Also der Debugger meint erstmal, dass es eine Zugriffsverletzung sei, allerdings ist mir nicht ganz schlüssig, WO diese sein soll... habe ich irgendetwas falsch initialisiert o.ä.?
-
Alles mist, wer lesen kann ist klar im Vorteil
-
Hat jemand ein paar allgemeine Tipps, wonach ich meinen Code checken sollte? Bin mit meinem Latein irgendwo am Ende
-
kingruedi schrieb:
Ist index vielleicht ausserhalb des Bereichs?
-
@deus: Daran liegt's ned, da MAX_LOG_HANDLERS 5 ist, und der von mir getestete Index 0 bzw. 1 beträgt, also nix mit out-of-bounds.
Andere Ideen?
thxia
-
Überschreibst du vielleicht irgendwo deinen this-Zeiger ??
-
Mal eine kurze Frage:
typedef struct { FILE* fp; char* path; bool append; bool isActive; } LogStruct; //... private: LogStruct* log;
Wird das überhaupt übersetzt? Du erstellst eine namenlose Struktur und erzeugst die Variable LogStruct. Und dann versucht diese Variable als Typbezeichner zu benutzen?!
Irgendwie passt das nicht so ganz, ich hoffe ich liege nicht völlig falsch!EDIT: Man sollte nicht übersehen, dass da noch ein typedef ist, somit ist es natürlich völlig falsch (EDIT2:was ich geschrieben habe)
-
Dann lösch deinen Quatsch doch wieder
-
@KPC: *g*
@deus:
Soweit ich weiß nicht, der this bleibt Zeiger auf die Klasse, ich hab ihm nix anderes zugewiesen...
-
aber vielleicht hast du ihn aus Versehen überschrieben, indem du über ne Arraygrenze hinüber bist, oder so. Kannst du an der Stelle auf andere Member deiner Klasse zugreifen?
-
Wie es ausschaut nix, also doch this überschrieben, wie kann ich checken wo?
-
So, hab den Log-Pointer jetze ma public gemacht, jetze gehts...!
Mit private gehts net - aber warum? Es wird doch von einer Memberfunktion der Klasse verändert?! Aber immerhin is damit die Access Violation erklärt...
-
So, das Problem hat sich gelöst, weiß aber trotzdem ned, woran's gelegen hat
Vielen Dank für eure Hilfe! *verbeug*