programm schnmiert beim zuweisen des speichers ab. warum?
-
es kommt vom debugger folgende fehlermeldung:
0xC0000005 Acces Violation
wie gesagt die funktion rufe ich sonst noch ein paarmal auf und nur an der stelle
bleibt sie hängen.
-
Zeig uns die Zeile, in der die Access Violation auftritt. Wenn der Code an der Stelle nicht von dir ist, bitte mit Callstack.
-
beim disassembly steht folgende zeile markiert:
2BFAD52C E1C230B0 strh
welcher zeile das in meinem code entsprich zeigt er mir net an.
kann ich einfach so folgendes machen?
DOWRD filesize;
size = GetFileSize(hdatei,NULL);
TCHAR* buffer = new TCHAR[size];
-
filesize - size
Und wieso TCHAR
-
DOWRD size;
size = GetFileSize(hdatei,NULL);
TCHAR* buffer = new TCHAR[size];*g* schreibfehler von mir
aber warum geht das nicht immer?
-
Bist du sicher, dass GetFileSize die Größe der Datei in TCHARs liefert?
Ich vermute es handelt sich dabei um Bytes. Nimm also char und nicht TCHAR.
-
ich will damit einen speicher alloc. der so groß ist wie die datei,
damit ich später deren inhalt in den speicher packen kann.
getfilesize gibt die größe in DWORD an.
-
honkitonk schrieb:
getfilesize gibt die größe in DWORD an.
GetFileSize gibt die Größe der Datei zurück (und das sind für gewöhnlich Bytes
) - das hat aber nichts mit dem Rückgabetyp (DWORD - 4 Bytes) zu tun
Wie jetzt schon mehrfach erwähnt: char! Also: char *buffer = new char[size]; Falls du das ganze nahher noch als String haben willst und für den Fall, dass es sich um Unicode handelt am Besten gleich noch 2 Bytes mehr reservieren (für das abschließende Nullzeichen)
-
also:
DOWRD size;
size = GetFileSize(hdatei,NULL);
char* buffer = new char[size+2];???
warum 2 bytes für ein Nullzeichen und warum char statt TCHAR?
-
Weil du beim Auslesen noch nicht unbedingt weißt, ob es sich um Unicode handelt (dort hat ein Nullzeichen dann ja auch 2 Bytes). TCHAR würde ja bei Kompilierung ohne UNICODE zu char und mit afaik zu wchar_t. Da deine Größe aber in Bytes zurückgegeben wird ist es besser, du nimmst dann auch gleich char und untersuchst erst anschließend den Buffer (z.B. mit IsUnicode)
-
ich weiß aber genau dass im buffer unicode ist.
wie muß ich dann mit size umgehen?
muß ich es umrechnen?
oder reicht TCHAR* buffer=newTCHAR[size+2];
-
Ich denke mal size/2 + 1 - bin mir aber nicht sicher.
Außerdem ist TCHAR ja nicht zwangsläufig UNICODE