Ir ao conteúdo
  • Cadastre-se

Problema Alocar e Inserir [C]


FiddleDum
Ir à solução Resolvido por CiroboyBR,

Posts recomendados

Bom dia Rapaziada, esse é meu primeiro post, e estou com uma dúvida quanto a matriz em um código que estou implementando sobre Batalha Naval, as minhas três primeiras funções são de Inicializar a Matriz, Inserir um caractere - e depois imprimi-la na tela, eu utilizei ponteiros e fiz a alocação, porém talvez por conta de alguma passagem no main na hora que vou executar é pedido as linhas e colunas e logo em seguida o programa para de responder, enfim este é o código para quem puder e tiver ideia de onde talvez possa estar o erro.

 

#include <stdio.h>
#include <stdlib.h>
 
char** inicializar(int l, int c){
int i,j;
 
char **matriz = (char**)malloc(l*sizeof(char*));
for(i=0;i<l;i++)
    matriz = (char*)malloc(c*sizeof(char));
    return matriz;
}
 
char** preencher(int l,int c, char** matriz){
    int i,j;
 
 
    for (i=0;i<l;i++){
        for(j=0;j<c;j++){
 
            matriz[j] = '-' ;
        }
 
        printf("\n");
    }
 
 
}
 
char imprimirMatriz(int l,int c, char** matriz){
 
    int i,j;
 
     for(i=0;i<l;i++){
       for(j=0;j<c;j++){
          printf("%c ",matriz[j]);
       }
       printf("\n");
     }
 
   }
 
 
int main(){
 
     int i,j,c,l;
     char **matriz;
 
     printf("digite a quantidade de linhas de sua matriz \n");
     scanf("%d",&l);
     printf("digite a quantidade de colunas de sua matriz \n");
     scanf("%d",&c);
 
     inicializar(l,c);
     preencher(l,c,matriz);
     imprimirMatriz(l,c,matriz);
 
 
 
 
}#include <stdio.h>
#include <stdlib.h>
 
char** inicializar(int l, int c){
int i,j;
 
char **matriz = (char**)malloc(l*sizeof(char*));
for(i=0;i<l;i++)
    matriz = (char*)malloc(c*sizeof(char));
    return matriz;
}
 
char** preencher(int l,int c, char** matriz){
    int i,j;
 
 
    for (i=0;i<l;i++){
        for(j=0;j<c;j++){
 
            matriz[j] = '-' ;
        }
 
        printf("\n");
    }
 
 
}
 
char imprimirMatriz(int l,int c, char** matriz){
 
    int i,j;
 
     for(i=0;i<l;i++){
       for(j=0;j<c;j++){
          printf("%c ",matriz[j]);
       }
       printf("\n");
     }
 
   }
 
 
int main(){
 
     int i,j,c,l;
     char **matriz;
 
     printf("digite a quantidade de linhas de sua matriz \n");
     scanf("%d",&l);
     printf("digite a quantidade de colunas de sua matriz \n");
     scanf("%d",&c);
 
     inicializar(l,c);
     preencher(l,c,matriz);
     imprimirMatriz(l,c,matriz);
 
 
 
 
}

 

 

Se alguém puder me ajuda eu agradeço.

 

Link para o comentário
Compartilhar em outros sites

  • Solução

O ponteiro não estava apontando para a área alocada na memória, ai dava erro.

#include <stdio.h>#include <stdlib.h>char** inicializar(int l, int c) {  int i,j;  char **matriz = (char**)malloc(l*sizeof(char*));  for(i=0; i<l; i++)    matriz[i] = (char*)malloc(c*sizeof(char));  return matriz;}char** preencher(int l,int c, char** matriz) {  int i,j;  for (i=0; i<l; i++) {    for(j=0; j<c; j++)      matriz[i][j] = '-' ;    printf("\n");  }}char imprimirMatriz(int l,int c, char** matriz) {  int i,j;  for(i=0; i<l; i++) {    for(j=0; j<c; j++)      printf("%c ",matriz[i][j]);    printf("\n");  }}int main() {  int i,j,c,l;  char **matriz;  printf("digite a quantidade de linhas de sua matriz \n");  scanf("%d",&l);  printf("digite a quantidade de colunas de sua matriz \n");  scanf("%d",&c);  matriz = inicializar(l,c);  preencher(l,c,matriz);  imprimirMatriz(l,c,matriz);  system("pause");}
  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

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!