Sto provando a scrivere un semplice programma per produrre in esadecimale i primi 16 kilobyte di un file binario (Game Boy ROM) in blocchi di 16 bit. Tuttavia durante il ciclo for
il mio programma invariabilmente segfault, tuttavia seg segna sempre in un punto diverso dell'array. Ecco il codice:Errore di segmentazione senza definizione di un array non utilizzato
#include <stdio.h>
#include <stdint.h>
int main()
{
uint16_t buffer[8000];
FILE* ROM = fopen("rom.gb", "rb");
if (ROM == NULL)
{
printf("Error");
fclose(ROM);
return 1;
}
fread(buffer, sizeof(buffer), 1, ROM);
int i;
for(i = 0; i < sizeof(buffer); ++i)
{
if (buffer[i] < 16)
{
printf("000%x ", buffer[i]);
}
else if (buffer[i] < 256)
{
printf("00%x ", buffer[i]);
}
else if (buffer[i] < 4096)
{
printf("0%x ", buffer[i]);
}
else
{
printf("%x ", buffer[i]);
}
}
fclose(ROM);
return 0;
}
Prima ho cambiato ad usare uint16_t al posto di char (dal momento che il Game Boy ha uno spazio di indirizzamento a 16 bit) questo non si è verificato, e infatti se includo la dichiarazione
unsigned char buffer2[16000];
accanto alla dichiarazione del primo buffer ottengo l'output previsto. Quindi le mie domande sono, perché aggiungere una variabile inutilizzata per fermare il programma da segfaulting? E come posso evitare di dover fare questo e dichiarare un enorme array che è completamente inutilizzato nel programma?
Grazie mille, questo ha risolto il problema e non ho più segfault durante il ciclo. – Xerxes