Ciao a tutti!!
Sto scrivendo un progetto per l'Università e da giorni mi tormenta questo problema sull'ultimo test che viene eseguito sulla mia funzione. Mi va in segmentation fault e non riesco a capire perché. Posto di seguito il codice della mia funzione (almeno la parte interessata):
codice:
header *h;
h=(header *)malloc(sizeof(header)*(DBF_FIXED_HEADER_LEN+MAX_NUM_FIELDS*(DBF_FIELD_LEN+MAX_NUM_FIELDS)+2));
.....
.....
FILE *fp=fopen(Name,"wb+");
strcat(Name,DBF_OPEN_EXT); /* gli ho aggiunto l'estensione $$$ perché così mi viene chiesto di fare quando il file è aperto */
int ret=fwrite(h,sizeof(h),1,fp);
if(ret!=h->dimHeader){
char Err[256];
(void) sprintf(Err, "Errore di sistema [%d] in scrittura su file: [%s]", errno, strerror(errno));
LPC_GestioneErrore(LPC_ERR_WRITE, "CreateDatabaseFile", Err);
if(h!=NULL)
free(h);
return LPC_ERR_WRITE;
}
strcat(&Name[strlen(Name)-4],DBF_EXTENSION); /* dopo aver scritto sul file lo rinomino con estensione .DBF (così va bene?) */
fclose(fp);
Questo è invece il test che viene fatto:
codice:
int ret= 0;
int NumFields = 0;
FILE *fp;
FIELD_DATA_t FieldData[MAX_NUM_FIELDS];
int len, len1;
char buf[500], buftest[500];
...
...
...
for(;;)
{
ret = -1;
fp = fopen("ProvaTest.dbf", "r");
len = fread(buftest, sizeof(char), 500, fp);
fclose(fp);
fp = fopen("Prova.dbf", "r");
len1 = fread(buf, sizeof(char), 500, fp);
fclose(fp);
if (len1 != len)
break;
// Confronto la prima parte (prima del timestamp)
len = DBF_NAME_LENGTH+1+2+4+2+2;
if (memcmp(buf, buftest, len))
break;
// Confronto la seconda parte (dopo il timestamp)
if (memcmp(buf+len+4, buftest+len+4, len1-len-4))
break;
ret = LPC_OK;
break;
}
if (ret == LPC_OK)
test[numtest].passed = 1;
numtest++;
Result("CREATE");