Utilizzo Visual Studio 2010 e nel seguente frammento di codice si verifica un'eccezione nell'istruzione if dopo fseek.Eccezione non gestita in un'istruzione if nel codice C
int load_filenew(char *filename, char **buffer)
{
int size = 0;
FILE *fp = 0;
fp = fopen(filename, "rb");
if (!fp)
{
printf(" fopen failed.\n");
return 1;
}
fseek(fp, 0, SEEK_END);
size = ftell(fp);
fseek(fp, 0, SEEK_SET);
if (size)
{
if (*buffer)
{
free(*buffer);
}
*buffer = 0;
*buffer = (char *)malloc(size + 1);
if (!*buffer)
{
printf(" malloc failed.\n");
fclose(fp);
return 3;
}
memset(*buffer, 0, size + 1);
fread(*buffer, size, 1, fp);
(*buffer)[size] = '\0';
}
else
{
fclose(fp);
return 2;
}
fclose(fp);
return 0;
}
Questa funzione viene chiamata più volte nel ricorso, ma in alcuni momenti di eccezione non gestita è lanciato seguente riga durante il caricamento di un file
//exception code
if (size)
{
if (*buffer)
prega di aiutare - quello che potrebbe essere la possibile causa e come risolverlo?
qual è il messaggio di errore? Si prega di postarlo. –
Potete includere come chiamate la funzione - e in particolare, cosa fate per garantire che * buffer == 0 o punti ad un buffer valido quando viene chiamato? La fonte più probabile di errore è 'buffer == NULL', o altrimenti non è un puntatore valido. – Floris
La riga '* buffer = 0;' è superflua. –