File nach buffer schreiben
-
Hallo,
ich möchte einen File in einen Buffer schreiben.
char buffer[4096]; HANDLE filehandle; filehandle = CreateFile("lcd_test.bin", GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if(filehandle == INVALID_HANDLE_VALUE) { Application->MessageBox("FILE NOT FOUND"," ",MB_OK | MB_ICONERROR); } else { DWORD dwFileSize; dwFileSize = GetFileSize(filehandle, NULL); DWORD dwFileRead; if(!ReadFile(filehandle, buffer, dwFileSize, &dwFileRead, NULL)) { Application->MessageBox("READ ERROR"," ",MB_OK | MB_ICONERROR); } else { Application->MessageBox("OK"," ",MB_OK | MB_ICONERROR); } }Ich habe nun aber keinen Speicher allociert, ?muss ich das?, es funkt auch
so. Und wenn ja wie allociert man Speicher?
Und wozu dient dwFileRead?
-
hermes schrieb:
Ich habe nun aber keinen Speicher allociert
hast du wohl:
char buffer[4096];du hast Speicherplatz auf dem Stack für 4096 Zeichen reserviert.
es funkt auch so
weil deine Testdatei weinige als 4096 Zeichen enthält.
besser:
int dwFileSize = GetFileSize(filehandle, NULL); char* buffer =new char[dwFileSize];
-
[quote="AndreasW"]
hermes schrieb:
du hast Speicherplatz auf dem Stack für 4096 Zeichen reserviert.
Danke für den Hinweis.
Liegt der Speicher deswegen im Stack weil dem Programm beim Start automatisch 4096 Byte für den Stack zugewiesen wird und das ist halt dann der zur verfügung stehende Speicher.
Muss ich den Speicher vor beenden des Programms wieder freigeben oder
geschieht dies automatisch?
-
hermes schrieb:
Muss ich den Speicher vor beenden des Programms wieder freigeben oder geschieht dies automatisch?
Hi,
wenn duchar buffer[CONST];schreibst wird der Speicher automatisch wieder freigegeben...
Bei:char *buffer = new char[VAR];musst du den Speicher wenn er nicht mehr benötigt wird mit
delete[] buffer;wieder freigeben...
Regel: Bei allen Klassen (außer den VCL Klassen mit Owner != NULL) mussen immer genau so viele deletes wie news da sein!
MfG
Alexander Sulfrian
-
Ein Hinweis.
In diesem Fall hätte die Freigabe mit
delete[] buffer;zu erfolgen.
Ciao
-
Hi,
stimmt natürlich....
Ich sollte so spät nicht mehr versuchen zu proggen....MfG
Alexander Sulfrian