Ir para conteúdo
Fórum Script Brasil
  • 0

Erro na liberação da memória alocada dinamicamente


Marcel Bonatto

Pergunta

Olá a todos

Minha dúvida está na hora em que o programa que desenvolvi faz a liberação da memória. O programa serve para verificar se uma dada matriz fornecida pelo usuário compõem um quadrado mágico, que é quando numa matriz a soma dos elementos de cada linha é igual à soma dos elementos de cada coluna e igual à soma dos elementos da diagonal principal e igual, também, à soma dos elementos da diagonal secundária. Para isso, declarei um ponteiro de ponteiros e uma variável para o tamanho da memória que será alocada.

int** pMatriz;
       int n;

    printf("Digite o tamanho da matriz quadratica: ");
    scanf("%d", &n);
    
    pMatriz = (int**)malloc(n*sizeof(int*));

    if(pMatriz == NULL) {exit(-1);}

    for(lin=0;lin<n;++lin){
        *(pMatriz+lin) = (int*)malloc(n*sizeof(int));
        if(*(pMatriz+lin) == NULL) {exit(-1);}
    }
Fiz a soma de uma linha e atribui esse valor para uma variável de soma. Depois fiz vários laços, nos quais uma variável de soma geral é acumulada com os valores das linhas, colunas, diagonal principa e diagonal secundária.
for(lin=0;lin<n;++lin){
        for(col=0;col<n;++col){
            somageral += (int)*(pMatriz+(lin*n+col));        
        }        
    }
Por fim, verifico se o valor que está na variável soma é equivalente ao valor da variável soma geral dividida pela variável n, que é multiplicada por dois e depois somada pelo valor 2.
if(soma == somageral/(n * 2 + 2))
        printf("A matriz compoem um quadrado magico\n");
    else
        printf("A matriz não compoem um quadrado magico\n");
Após tudo isso, então, faço a liberação da memória que foi alocada dinamicamente.
for(lin=0;lin<n;++lin){        
        free(*(pMatriz+lin));        
    }

    free(pMatriz);

Porém, na parte da função free(pMatriz[lin]) que é gerado o seguinte erro: Unhandled exception at 0x102d12b4 (msvcr90d.dll) in Exercicio_05.exe: 0xC0000005: Access violation reading location 0x00000000.

O que pode estar causando tal erro?

Grato a todos.

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...