Ir ao conteúdo
  • Cadastre-se

Yago Sousa

Membro Júnior
  • Posts

    4
  • Cadastrado em

  • Última visita

Reputação

0
  1. Eu corrigi o código como você falou eu não acredito que eu errei em algo tão superficial. deixa eu ver se eu entendi: quer dizer que o malloc fez a locação para as linhas {a ; a ; a ; a} mas como o loop n foi feito a alocação para as colunas não aconteceu então quando a variável contadora i passou de 1 ele da erro de memoria porque não foi alocada memoria para ele. seria isso? então o erro não estava onde o copilador mostrou mas sim na alocação, serio eu refiz o código varias vezes e não me toquei para isso. valeu cara valeu mesmo.
  2. Esta havendo um erro quando executo o meu código, mais precisamente no momento em que coloco o primeiro elemento na matriz. O código foi copilado no visual estudo 2013. Código: //Contruir duas matrizes de tamanhos iquais e quadradas e multiplicar-las.#include <stdio.h>#include <stdlib.h>int **_matriz1, **_matriz2, **_resultado;void recebe_tamanho_das_matrizes();void aloca_memoria(int tamanho1linha, int tamanho1coluna, int tamanho2linha, int tamanho2coluna);void recebe_valores(int tamanho1linha, int tamanho1coluna, int tamanho2linha, int tamanho2coluna);void multiplica_matrizes_e_mostra(int tamanho1linha, int tamanho1coluna, int tamanho2linha, int tamanho2coluna);void libera_memoria(int tamanho1linha, int tamanho1coluna, int tamanho2linha, int tamanho2coluna);int main(void){recebe_tamanho_das_matrizes();system("pause");return 0;}void recebe_tamanho_das_matrizes(){int tamanho1linha,tamanho1coluna, tamanho2linha,tamanho2coluna;//recebe valores de matriz 1do{printf("Digite o numero de linhas da matriz 1: ");scanf_s("%d", &tamanho1linha);if (tamanho1linha <= 0){printf("ERRO!. Digite valores positivos e maiores que zero.\n");}}while (tamanho1linha <= 0);//recebe valores para coluna de 1 coluna de 2, eles devem ser iquais para ocorrer a multiplicaçãodo{printf("Digite o numero colunas de 1 e linhas de 2: ");scanf_s("%d", &tamanho1coluna);if (tamanho1coluna <= 0){printf("ERRO!. Digite valores positivos e maiores que zero.\n");}tamanho2linha = tamanho1coluna;} while (tamanho1coluna <= 0);//recebe valores de matriz 2do{printf("Digite o numero de colunas da matriz 2: ");scanf_s("%d", &tamanho2coluna);if (tamanho2coluna <= 0){printf("ERRO!. Digite valores positivos e maiores que zero.\n");}}while (tamanho2coluna <= 0);aloca_memoria(tamanho1linha, tamanho1coluna, tamanho2linha, tamanho2coluna);}void aloca_memoria(int tamanho1linha, int tamanho1coluna, int tamanho2linha, int tamanho2coluna){int i=0;_matriz1 = (int**)malloc(tamanho1linha * sizeof(int *)); //aloca a matriz 1for (i = 0; i < tamanho1linha; i++);_matriz1[i] = (int*)malloc(tamanho1coluna*sizeof(int));_matriz2 = (int**)malloc(tamanho2linha * sizeof(int *)); //aloca a matriz 2for (i = 0; i < tamanho2linha; i++);_matriz2[i] = (int*)malloc(tamanho2coluna*sizeof(int));_resultado = (int**)malloc(tamanho1linha * sizeof(int *)); //aloca o resutladofor (i = 0; i < tamanho1linha; i++);_resultado[i] = (int*)malloc(tamanho2coluna*sizeof(int));recebe_valores(tamanho1linha, tamanho1coluna, tamanho2linha, tamanho2coluna);}void recebe_valores(int tamanho1linha, int tamanho1coluna, int tamanho2linha, int tamanho2coluna){int i, j;for (i = 0; i < tamanho1linha; i++)for (j = 0; j < tamanho1coluna; j++){printf("Digite o elemento [%d][%d] da primeira matriz: ", i, j);scanf_s("%d", &_matriz1[i][j]);}printf("\n\n");for (i = 0; i<tamanho2linha; i++)for (j = 0; j<tamanho2coluna; j++){printf("\nElemento[%d][%d] = ", i, j);scanf_s("%d", &_matriz2[i][j]);}multiplica_matrizes_e_mostra(tamanho1linha, tamanho1coluna, tamanho2linha, tamanho2coluna);}void multiplica_matrizes_e_mostra(int tamanho1linha, int tamanho1coluna, int tamanho2linha, int tamanho2coluna){int i=0, j=0,c=0,temp=0;for (i = 0; i < tamanho1linha; i++){for (j = 0; j < tamanho2coluna ; j++){for (c = 0; c < tamanho1coluna ; c++){temp += _matriz1[i][c] * _matriz2[c][j];_resultado[i][j] = temp;}printf("Matriz[%d][%d]: %d\n", i, j, _resultado[i][j]);temp = 0;}}}void libera_memoria(int tamanho1linha, int tamanho1coluna, int tamanho2linha, int tamanho2coluna){int i;for (i = 0; i < tamanho1linha; i++) {free(_matriz1[i]);}free(_matriz1);for (i = 0; i < tamanho2linha; i++) {free(_matriz2[i]);}free(_matriz2);for (i = 0; i < tamanho1coluna; i++) {free(_resultado[i]);}free(_resultado);}

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!