Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » ifstream bringt alles durcheinander

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
07.03.2006, 15:21 Uhr
Krevetten



Hallo,

Ich benutze ifstream um einen Datensatz aus einer Datei in ein unsigned short int array einzulesen. Das funktioniet auch in so fern, dass die Daten korrekt eingelesen werden. Allerdiungs tritt dann oft an irgendeiner Stelle im Programm, welche überhaupt nichts
damit zu tun hat, eine access violation auf (sowas wie read of address 0x00000004).
Ob und wo genau im Programm es dann dazu kommt, hängt wohl irgendwie von der
Speicherbelegung ab.

Hier nun der code:


C++:
bool HeightMap16::loadMapFromFile(char* filename)
{
  std::ifstream fin(filename, std::ios::binary);

  if (fin)
  {
    fin.read((char*)_map, sizeof(short int) * _hSize * _vSize);
  }

  fin.close();
  return fin.good();
}



_map ist das oben erwähnte array, welches aus _hSize * _vSize Elementen besteht.
Wenn Ich Werte für map im Programm erzeuge, tritt das Problem nicht auf.
Auch wenn ich auf _map nicht zugreife - wenn ich zB (testweise) so etwas probiere:


C++:
if (fin)
  {
    unsigned short int bla;
    fin.read((char*)&bla, sizeof(short int));
  }



kommt es zum selben Fehler.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
07.03.2006, 15:24 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


zeig mal deine definition von der map. Evtl haste da irgendwo anders die AV drin.
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
07.03.2006, 15:32 Uhr
Krevetten




C++:
unsigned short int*  _map;



map wird dann eindeutig durch

C++:
HeightMap16::HeightMap16(int vSize, int hSize):_vSize(vSize),
                                               _hSize(hSize)
{
  _map = new unsigned short int[_vSize * _hSize];
}


initialisiert.

was meinst du mit apt bzw. LFS?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
07.03.2006, 16:49 Uhr
ao

(Operator)


Das sieht OK aus, der Fehler liegt vermutlich woanders. Sogenannter "Heisenbug". Gute Jagd!

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
08.03.2006, 08:57 Uhr
Krevetten



Ich suche bereits seid Wochen danach. Ich wundere mich wirklich, was das sein könnte,
da der Fehler ja nicht mehr auftritt, wenn ich die Zeile

C++:
fin.read((char*)_map, sizeof(short int) * _hSize * _vSize);


auskommentiere. Und weil _map bereits initialisiert und mit Werten (in diesem Fall 0) gefüllt ist,
dürfte das eigentlich nicht das Problem sein. Auch wenn ich eine Datei einlese, die ebnfalls nur
Nullen enthält oder auf _map gar nicht zugreife, kommt es später zu diesem Fehler. Kann es
sein, das ifstream::read den Speicher in einem anderen bereich meines Programms durch-
einanderbringt. Mit dem Debugger habe ich herausgefunden, dass der Fehler diesmal bei der
Zeile

C++:
if (_sprites)


auftritt, wobei _sprites mit NULL initialisiert worden ist (und vom Typ
std::map<std::string, LPD3DXSPRITE>*). Im gesammten Programm wird bis zur oben
erwähnten Zeile nicht mehr auf _sprites zugegriffen. Und wie gesagt haben _map und
_sprites überhaupt keine verbindung zueinander. Könnte es sein, dass ifstream::read
bei mir fahlerhaft ist. Ich benutze einen Borland-Compiler. Vieleicht ist das wieder eine
seiner Besonderheiten.
 
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: