000
22.08.2007, 09:57 Uhr
cmos
|
Hallo, ich hab nen seltsamen phänomen auf meinem rechner.
ich lese ein kleien datei binär ein, ca 19K groß. eingelsen wird sie mit der CFile funktion. ich öffne die datei, lasse mir dir größe geben und allokiere speicher für den buffer entsprechend der dateigröße und lese dann die datei ein. dann fange ich an, die eingelesene datei zu parsen. ich benutze da z.b. memcpy funktion.
jetzt habe ich an dem code nichts weiter geändert, außer, dass ich die datei nun mit ifstream einlese. ich öffne die datei, bestimme dateigröße und allokiere speicher für den buffer.. also alles wie oben. das einlesen klappt auch. aber jetzt erhalte ich bei memcpy eine access violation
zum code: es wird ein teil aus der gelesenen datei geparst und dann der methode SetUHL übergeben. es funktioniert alles wie vorher, bis auf diese acces violation wenn ich die datei mit ifstream einlese. ich benutze visual c++ 6 SP5
für mich ist das ein rätsel. die datei wird mit CFile und ifstream eingelesen vor der übergabe an diese methode benutze ich auch strncpy auf den buffer. es funktioniert bei beiden varianten. erst wenn ich die methode m_dtedData->SetUHL(...) aufrufe, bekomme ich (bei nutzung von ifstream) eine access violation.
C++: |
void CDTEDData::SetUHL(char* pcUHLValues) { ::memcpy(m_cUHL,pcUHLValues,sizeof(m_cUHL)); }
|
Wenn ich
C++: |
void CDTEDData::SetUHL(char* pcUHLValues) { char temp[100] = {0}; ::memcpy(temp,pcUHLValues,sizeof(temp)); //::memcpy(m_cUHL,pcUHLValues,sizeof(m_cUHL)); }
|
mache, erhalte ich keine access violation. m_cUHL ist ein private member dessen größe festgelegt ist. die länge von pcUHLValues überschreitet auch nicht die größe von m_cUHL.
grüße, cmos Dieser Post wurde am 22.08.2007 um 10:01 Uhr von cmos editiert. |