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.
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.
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.
Pergunta
Marcel Bonatto
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.
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. 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. Após tudo isso, então, faço a liberação da memória que foi alocada dinamicamente.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.