Quindi, in pratica, desidero scrivere un array di byte su un file, tuttavia il programma si blocca. Eccezione non gestita a 0x7766DEE1 (KernelBase.dll) in append.exe: 0xC0000005: posizione di scrittura della violazione di accesso 0x00000000.Writefile provoca un arresto anomalo, con violazione di accesso
BYTE *image ;
BYTE *bigMem;
#define REASONABLY_LARGE_BUFFER 16777216
file = CreateFile(fileName, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
fileSize = GetFileSize(file, NULL);
bigMem = (BYTE *)HeapCreate(NULL, REASONABLY_LARGE_BUFFER, 0);
image = (BYTE *)HeapAlloc(bigMem, HEAP_ZERO_MEMORY, fileSize);
if (bigMem == NULL || image == NULL){
printf("Allocation failed");
return EXIT_FAILURE;
}
printf("We are writing to the file %p, with data location %p, and filesize %d\n", file, image, fileSize);
LPDWORD at = 0;
WriteFile(file, image, fileSize, at, NULL);
Quella di stampa dice: Stiamo scrivendo al file 00.000.038, con dati di posizione 02.451.590, e la dimensione del file 161169
Sei sicuro che 16 MB sia "abbastanza grande"? Cosa succede se il sistema operativo non vuole darti quella quantità di memoria heap e la funzione di allocazione restituisce 'NULL'? Tu ** mai ** controlla che, dovresti. –
Ho appena inserito il codice per controllare se bigMem o l'immagine sono nulli e nessuno dei due lo è. – ThePlague
Se si aggiunge il controllo degli errori, è necessario verificare che il file sia stato effettivamente aperto. –