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.
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.