Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - problemi gestione memoria malloc
Forum - C/C++ - problemi gestione memoria malloc

Avatar
tekdu (Normal User)
Rookie


Messaggi: 45
Iscritto: 07/04/2010

Segnala al moderatore
Postato alle 12:13
Mercoledì, 09/02/2011
salve, da poco programmo in c ed ho riscontrato dei problemi scrivendo una funzione che carica una matrice di caratteri con la "lista" dei file di una directory.
l'errore avviene se utilizzo 2 volte la funzione, la prima volta non ci sono problemi.
Cosa ho sbagliato?? aiuto please.

Ultima modifica effettuata da tekdu il 09/02/2011 alle 12:19
PM Quote
Avatar
tekdu (Normal User)
Rookie


Messaggi: 45
Iscritto: 07/04/2010

Segnala al moderatore
Postato alle 12:17
Mercoledì, 09/02/2011
Codice sorgente - presumibilmente C++

  1. char** getFiles(int *counter,const char* path){
  2.     DIR *directory=opendir(path);
  3.     struct dirent *drent;
  4.     int nItems=2;
  5.     int i=0;
  6.     if(directory==NULL){
  7.     perror("failed to open directory");
  8.         return;
  9.     }
  10.     char p[50];
  11.     strcpy(p,path);
  12.     strcat(p,"/");
  13.     char **files=(char**)malloc(sizeof(char*)*nItems);
  14.     while ((drent= readdir(directory))!=NULL){
  15.         if(strcmp(".",drent->d_name)!=0 && strcmp("..",drent->d_name)!=0){
  16.         size_t nameLen=strlen(drent->d_name)+strlen(p);
  17.         files[i]=(char*)malloc(sizeof(char)*nameLen);
  18.         strcpy(files[i],p);
  19.         strcat(files[i],drent->d_name);
  20.         i++;
  21.         }
  22.         if(i>nItems-1) {
  23.             nItems*=2;
  24.             files=(char**)realloc(files,(sizeof(char*)*nItems));
  25.         }
  26.     }
  27.     files=(char**)realloc(files,(sizeof(char*)*i));
  28.     memcpy(counter,&i,sizeof(int));
  29.     return files;
  30. }
  31.  
  32. void main(){
  33. char f**;
  34. int c,i;
  35. f=getFIles(&c,"directoryUNO");
  36. for(i=0;i<c;i++){
  37. printf("%s \n,f[i]);
  38. free(f[i]);
  39. }
  40. free(f);
  41. f=getFIles(&c,"directoryDUE");
  42. for(i=0;i<c;i++){
  43. printf("%s \n,f[i]);
  44. free(f[i]);
  45. }
  46. free(f);
  47. }



errore riscontrato: sysmalloc c3096 assertion................................... failed;
credo sia un under/over flow ma non saprei.... help help!

Ultima modifica effettuata da tekdu il 09/02/2011 alle 12:19
PM Quote
Avatar
Pitagora (Member)
Expert


Messaggi: 367
Iscritto: 12/06/2010

Segnala al moderatore
Postato alle 17:39
Mercoledì, 09/02/2011
guarda la riga 33
Codice sorgente - presumibilmente C/C++

  1. char f**;


va sostituita con
Codice sorgente - presumibilmente C/C++

  1. char **f;


poi per altre cose non penso che ci siano errori :D

PM Quote