Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » acces violation bei ifstream

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
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.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
22.08.2007, 10:12 Uhr
Tommix



Hallo,
es könnte sein daß Du mehr Bytes kopierst als in pcUHLValues drin stehn und die Zugriffsverletzung beim Lesen passiert.

C++:
void CDTEDData::SetUHL(char* pcUHLValues, size_t size)
{    
    if (size > sizeof(m_cUHL)) size = sizeof(m_cUHL); // Oder auch Fehlerausgabe
    ::memcpy(m_cUHL,pcUHLValues, size);        
}



Gruß, Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
22.08.2007, 10:30 Uhr
cmos



Des Rätsel Lösung
Ich habe beim Umschreiben zu ifstream
auch die Instanzierung eines Objektes mit auskommentiert.
Somit kann es ja nicht funktionieren... oh man

Also, Fehlalarm

Grüße,
cmos
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
22.08.2007, 11:44 Uhr
cmos



Danke Tommix,
ich hab deinen 'Beitrag erst jetzt gesehen. Hattte vorin geantwortet ohne die Seite zu aktualisieren.

Grüße,
cmos
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: