CString macht komisches Zeugs!
-
Update:
headerdatei:class CClass { public: CString m_str; void Func1(); void Func2() { m_str="Test"; //<- Klappt } };
cpp-datei:
void CClass::Func1() { m_str="Test"; //<- Klappt nicht, adresse von m_str hat sich geändert, // deswegen ist m_pchData == NULL -> Absturz. }
Also sobald die Funktion inline ist, klappt es. Jemand ne Idee, warum?
[ Dieser Beitrag wurde am 11.10.2002 um 21:44 Uhr von dEUs editiert. ]
-
ich untersuchs mal.
-
Kannst du das vielleicht in einem kleinen Projekt mal austesten (zum Download), ob der Fehler dann auch auftritt und wir mal daran rumbasteln können. Wahrscheinlich fällt dir der Fehler auf, wenn du es nochmal in einem Basisprogramm ohne irgendwelchen Schickschack ausprobierst. Oder Visual C++ macht bei größeren Programmen einen Compilierfehler.
-
Hallo, also nach der Beschreibung bekomme ich dein Problem nicht reproduziert. würde also Vorschlag von <hoo> empfehlen und das Ganze in einem neuen Project testen, vielleicht übersiehst du da was.
Gruß mathi
-
also ich kann es zu meinen bedauern auch nicht reproduzieren
-
Initialisier den CString mal im Konstruktor mit "".
-
Ich denke mal das wird im Konstruktor von CString selber gemacht.
-
Original erstellt von <Dichter & Denker>:
Ich denke mal das wird im Konstruktor von CString selber gemacht.Dieser Vorschlag ist durchaus ernst gemeint. So ein ähnliches Problem hatte ich nämlich auch schon mal mit dem CString.
-
Probier das ganze auch mal testweise mit std::string. Müsste ja bei so einfachen Sachen fast kompatibel in der Bedienung sein.
-
So habs gelöst. Wollte es für euch reproduzieren. Am Ende hatte ich sowas:
class CClass { public: bool b; CString str; }
Das obige stürzte ab.
class CClass { public: CString str; }
das net.
Das kam mir doch sehr spanisch vor und weils in nem anderen prog so funktioniert und es ja auch keinen grund für nen absturz gibt, hab ich mal den include dieser headerdatei als allererste gesetzt. Und es hat funktioniert. Also lag der Fehler irgendwo in den anderen inkludierten Dateien. Es war dann ein vergessenes #pragma pack(8) nach einem #pragma pack(2)
-
uh, ganz böser fehler
-
Hm, deshalb sollte man auch immer
#pragma pack( push, 2)
#pragm pack( pop) verwenden
-
Naja, dann hätte ich halt das pop vergessen
Aber danke für den Tip.
-
So, jetzt müsst ihr mir nur noch erklären für was
#pragma pack(..) ist....Devil