Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 19
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    160

    [C] Problemi con i test

    Ciao

    Sto testando un mio programma tramite una funzione di test che mi è stata fornita per il progetto che sto realizzando. Praticamente come parte il primo test mi dà questo errore:

    codice:
    Test CREATE
    Test:[10101] Peso:[3] - [CREATE: nome NULL]
    Errore [-1] in [CreateDatabaseFile]-->[Nome DB nullo o non valido o NumFields<=0]
    *** glibc detected *** free(): invalid pointer: 0xbfc04470 ***
    Abortito
    il quale dovrebbe essere relativo a questa parte di codice: (scritta da me)

    codice:
    int CreateDatabaseFile(char *Name, int NumFields, FIELD_DATA_t *FieldData){
        int test;
        int i;
        char *finale;
        int headerlen;
        header *h;
        if((Name==NULL) || (cercaErr(Name)==1) || (NumFields<=0)){
           char Err1[256];
           (void) sprintf(Err1, "Nome DB nullo o non valido o NumFields<=0");
           LPC_GestioneErrore(LPC_BAD_ARG, "CreateDatabaseFile", Err1);
           free(Err1);
           free(h);
           free(finale);
           free(FieldData);
           free(Name);
           return LPC_BAD_ARG;
        }
    Il sorgente del della funzione di test invece è questo: (metto solo la parte interessata)

    codice:
    void TestCreate(void)
    {
    	int ret= 0;
    	int NumFields = 0;
    	FILE *fp;
    	FIELD_DATA_t FieldData[MAX_NUM_FIELDS];
    	int len, len1;
    	char buf[500], buftest[500];
    
    	printf("Test CREATE\n");
        
    // Test sul nome
    	// null
    	test[numtest].testid = 10101;
    	test[numtest].weight = 3;
    	strcpy(test[numtest].desc, "CREATE: nome NULL");
    	printf("Test:[%d] Peso:[%d] - [%s]\n", test[numtest].testid, test[numtest].weight,test[numtest].desc);
    	ret = CreateDatabaseFile(NULL, NumFields, &FieldData[0]);
    	printf("Ritorno della create: [%d]\n\n", ret);
    	if (ret != LPC_OK)
    		test[numtest].passed = 1;
    	numtest++;
    Non riesco a capire quale free() gli dà fastidio.

  2. #2
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    160
    Inoltre ho notato che il problema si presenta cancellando anche tutte le free()

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    160
    Aiuto per favore se non faccio i test praticamente è come se non avessi fatto niente perché non posso controllare se le funzioni da me create sono fatte bene

  4. #4
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    160
    Prima mi ero sbagliato se tolgo le free() funziona però il fatto è che quando lancio la gestione dell'errore devo disallocare tutta la memoria allocata fino a quel momento. In questo caso cosa devo disallocare?

  5. #5
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    160
    Allora sono riuscito a risolvere praticamente tutti i problemi (erano le free()). Adesso ho un problema solo con l'ultimo test. Vi posto il codice del test:

    codice:
    // Verifica correttezza
    	test[numtest].testid = 10113;
    	test[numtest].weight = 10;
    	strcpy(test[numtest].desc, "CREATE: Verifica correttezza");
    	printf("Test:[%d] Peso:[%d] - [%s]\n", test[numtest].testid, test[numtest].weight,test[numtest].desc);
    	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");
    
    }
    Questo invece è il codice da testare (scritto da me, dovrebbe essere questa parte almeno):

    codice:
    int ret=fwrite(h,sizeof(h),(size_t) h->dimHeader,fp);
       if(ret!=h->dimHeader){
          char Err9[256];
                 (void) sprintf(Err9, "Errore di scrittura su file");
                 LPC_GestioneErrore(LPC_ERR_WRITE, "CreateDatabaseFile", Err9);
                 return LPC_ERR_WRITE;
           }
       rename(Name,finale);
       fclose(fp);
    Praticamente il test mi va in Segmentation fault, ma non capisco cosa mi sono dimenticato di allocare.

    Grazie.

  6. #6
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    160

    [C] Segmentation fault aiuto!!!!

    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");

  7. #7
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472

    Moderazione

    Ho unito le discussioni, visto che si tratta dello stesso argomento...
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  8. #8
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    160
    Ok grazie

  9. #9
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    160
    Per favore sto uscendo pazzo. E' da 1 settimana che sto dietro a questo errore

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Ok ... ma dopo che le discussioni sono state unite, non capisco piu' il problema in quale codice sta ...

    E soprattutto, perche' si possa provare il codice, dovresti fornirlo in maniera piu' completa possibile. Se per la prova si devono correggere errori di compilazione derivanti da dichiarazioni di variabili mancanti o cose simili, si rinuncia a rispondere ...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.