Ir para o conteúdo
bertolo

limpeza de matrizes

Mensagens Recomendadas

bertolo    0
bertolo

boas pessoal qual o problema disto....fds nao entendo

void limpa_matriz_float(int x,int y,float **matriz)
{
  for(x=x-1;x>=0;x--)
    {
for (y=y-1;y>=0;y--)
    free((float)matriz[x][y]);

free(matriz[x]);
    }
return ;
}

diz-me

base_dados_aux.c: In function ‘limpa_matriz_char’:

base_dados_aux.c:128: warning: passing argument 1 of ‘free’ makes pointer from integer without a cast

base_dados_aux.c:134: warning: ISO C forbids nested functions

base_dados_aux.c: In function ‘limpa_matriz_float’:

base_dados_aux.c:139: error: incompatible type for argument 1 of ‘free’

base_dados_aux.c: In function ‘limpa_matriz_char’:

base_dados_aux.c:134: warning: ISO C90 forbids mixed declarations and code

base_dados_aux.c:144: error: expected declaration or statement at end of input

make: *** [roadtoll_server] Error 1

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
mogers    14
mogers

Não podes libertar memoria de uma variavel - esses (float) matrix[ x ][ y ]. Para libertares a memória basta-te o free(matriz[ x ]);

void free(void *ptr);

free() frees the memory space pointed to by ptr, which must have been returned by a previous call to malloc(), calloc() or realloc(). Otherwise, or if free(ptr) has already been called before, undefined behaviour occurs. If ptr is NULL, no operation is performed.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
mogers    14
mogers

E free(matriz) ?

Acho que não chega. Porque "matriz" é um array de apontadores de floats (apontador para o array de cada linha). Acho que só vai libertar a memoria desse array e não liberta a memoria de cada linha da matriz.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
pmg    102
pmg

Cada um dos mallocs tem que ter um free!

Para um array de array tens que fazer 1 malloc para o "array mestre" e outros malloc's para cada sub-array. Pois bem ... os free's são 1 por cada sub-array e outro pelo "array mestre".

#include <stdlib.h>
#define ROWS 42
#define COLS 24
int main(void) {
  double **array;
  int i;

  array = malloc(ROWS * sizeof *array);
  for (i=0; i<ROWS; i++) {
    array[i] = malloc(COLS * sizeof **array);
  }

  /* usa array */
  array[4][7] = 42.42;

  for (i=0; i<ROWS; i++) {
    free(array[i]);
  }
  free(array);
  return 0;
}

Edit: É claro que os mallocs deviam ser testados! :P

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
pedrosorio    5
pedrosorio

Acho que não chega. Porque "matriz" é um array de apontadores de floats (apontador para o array de cada linha). Acho que só vai libertar a memoria desse array e não liberta a memoria de cada linha da matriz.

Eu não estava a sugerir que chegava, estava a perguntar se, para além do

free(matriz[x])

não era necessário

free(matriz)

:)

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora


×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade