Sou iniciante em c, e estou estudando alocação dinâmica de memória e ponteiros e eu pensei que estava entendendo bem até ocorrer um problema. Refiz um programinha que calcula a multiplicação de duas matrizes que o usuário escolhe quantas linhas e quantas colunas as matrizes vão ter, testa se a coluna da primeira matriz é igual a linha da segunda e em caso positivo, aloca dinamicamente memória para essas matrizes. Para isso criei uma função para multiplicar as matrizes que retorna um ponteiro.
Eu queria atribuir esse ponteiro retornado pela função a outro ponteiro para posteriormente em um laço for imprimir o resultado na tela. O problema é que quando eu atribuo o valor de retorno da função a outro ponteiro e depois vou acessar os elementos desse ponteiro, ele me retorna valores completamente errados que, ao que tudo indica, estão em endereço de memória nada a ver.
No entanto, se eu fizer o mesmo processo de modo direto, usando o retorno da função diretamente no laço for sem atribuí-lo a outro ponteiro, o programa funciona normalmente.
Por que não consigo fazer da primeira maneira? Estou fazendo algo errado?
Se eu faço dessa maneira logo abaixo, não funciona.
Utilizamos cookies e tecnologias semelhantes de acordo com a nossa Política de Privacidade, e ao continuar navegando, você concorda com estas condições.
Pergunta
spdm
Olá pessoal,
Sou iniciante em c, e estou estudando alocação dinâmica de memória e ponteiros e eu pensei que estava entendendo bem até ocorrer um problema. Refiz um programinha que calcula a multiplicação de duas matrizes que o usuário escolhe quantas linhas e quantas colunas as matrizes vão ter, testa se a coluna da primeira matriz é igual a linha da segunda e em caso positivo, aloca dinamicamente memória para essas matrizes. Para isso criei uma função para multiplicar as matrizes que retorna um ponteiro.
Eu queria atribuir esse ponteiro retornado pela função a outro ponteiro para posteriormente em um laço for imprimir o resultado na tela. O problema é que quando eu atribuo o valor de retorno da função a outro ponteiro e depois vou acessar os elementos desse ponteiro, ele me retorna valores completamente errados que, ao que tudo indica, estão em endereço de memória nada a ver.
No entanto, se eu fizer o mesmo processo de modo direto, usando o retorno da função diretamente no laço for sem atribuí-lo a outro ponteiro, o programa funciona normalmente.
Por que não consigo fazer da primeira maneira? Estou fazendo algo errado?
Se eu faço dessa maneira logo abaixo, não funciona.
matriz3 = multMatriz(linhas,colunas,matriz1,linhas2,colunas2,matriz2);
for(cont=0; cont< linhas; cont++)
{
for(cont2 = 0;cont2 < colunas2; cont2++)
{
printf(" %d ",*(matriz3+(cont * colunas2 + cont2)));
if(cont2 == colunas2 - 1)
{
printf("\n");
}
}
}
Mas se eu faço de maneira de maneira direta funciona:
for(cont=0; cont< linhas; cont++)
{
for(cont2 = 0;cont2 < colunas2; cont2++)
{
printf(" %d ",*(matriz3 = multMatriz(linhas,colunas,matriz1,linhas2,colunas2,matriz2)+(cont * colunas2 + cont2)));
if(cont2 == colunas2 - 1)
{
printf("\n\n");
}
}
}
Onde está meu erro? Se puderem ajudar, eu agradeço.
Link para o comentário
Compartilhar em outros sites
4 respostass 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.