1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Memoria Dinâmica - C

Discussão em 'Programação' iniciada por Jotahaka, 22 de Dezembro de 2012. (Respostas: 1; Visualizações: 679)

  1. Jotahaka

    Jotahaka Power Member

    Boas pessoal, estou aqui com um ligeiro "stress" e lembrei-me que o pessoal porreiro do forum talvez me soubesse ajudar ;)
    Estou a fazer um projeto em C e isto está-me a dizer que tenho 306 allocs e dos 74 frees, devo ter aqui algumas funcionalidades que alocam memoria e não sei xD
    O código é este:

    Código:
    void similarProtein (char *protein, int error, char *folder, AUX_T * aux)
    {
      struct param param;
    
    
      param.protein = malloc (sizeof (char) * strlen (protein) + 1);
      param.folder = malloc (sizeof (char) * strlen (folder) + 1);
      strcpy (param.folder, folder);
      strcpy (param.protein, protein);
      param.error = error;
      param.extension = ".amino-strand";
      param.aux.numFiles = 0;
      param.aux.numLines = 0;
      param.funcao = consumerSimilar;
      producer (&param);
    
    
      aux->numFiles = param.aux.numFiles;
      aux->numLines = param.aux.numLines;
      free (param.protein);
      free (param.folder);
    }
    
    typedef struct
    {
      int numFiles;
      int numLines;
    } AUX_T;
    
    struct param
    {
      char **buffer;
      int index_leitura;
      int index_escrita;
      int total;
      int stop;
      int error;
      int max;
      char *extension;
      char *folder;
      char *protein;
      pthread_mutex_t mutex;
      pthread_cond_t cond;
      void *(*funcao)(char* ,struct param*);
      void *(*funcaoConsumer)(char*, struct param*);
      void *(*funcaoGeneCount)(struct param*);
      void *(*funcaoAuxConsumer)(struct param*);
      AUX_T aux;
      GENE_T gene;
    };
    
    
    
    
    
    Se precisarem de algum código que aqui falte digam.
    Cumps
     
  2. mauro1855

    mauro1855 I'm cool cuz I Fold

    Pah, esse codigo parece estar correcto, portanto o problema é capaz de não estar aí.
    Compila esse programa com a flag -g ou -ggdb e corre o valgrind da seguinte forma "valgrind --leak-check=full --show-reachable=yes ./[nome_programa]"

    Normalmente nesta situação o valgrind costuma dizer onde é que a memória não libertada foi alocada...
    Cumps
     

Partilhar esta Página