Ir ao conteúdo
  • Cadastre-se
Tolledo

Nao consigo achar o erro - Arquivo e alocação dinâmica

Recommended Posts

Estou começando a digitar um código, porém, a parte inicial dele não está funcionando bem.

 

Resumindo o que eu queria dessa parte inicial:

O programa iniciaria e o usuario deve inserir o nome e o formato do arquivo a ser aberto (Nesse caso, uma imagem PPM)

Em seguida, seriam lidas as 3 informações iniciais do arquivo

"P3

 400 300"

Onde P3 é o tipo do arquivo e 400 300 é o numero de colunas e linhas

Depois disso, com alocação dinamica, seria criada uma matriz para armazenar as 400 colunas e 300 linhas de valores. Por fim, coloquei um printf com a matriz para ver se os valores seriam exibidos corretamente.

 

O problema que, apos verificar que o arquivo possui 400 colunas e 300 linhas, o programa para de responder e é finalizado automaticamente.

 

Vocês poderiam me ajudar a encontrar o erro no codigo?

Muito obrigado.

 

O código é o seguinte: 

 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
void Ler_Imagem (int Col, int Lin, int ***v)
{
    int i, j;
    char nome[50], Tipo[2];
    FILE *inFile;
 
    printf("Insira o nome da imagem e seu formato:\n");
    scanf("%s", &nome);
 
    inFile = fopen(nome, "r");
    if (inFile == NULL){
        printf("Erro ao abrir arquivo.\n");
        exit(1);
    }
    else {
        printf("O programa foi aberto com sucesso!\n");
    }
 
    fscanf(inFile, "%s %d %d", &Tipo, &Col, &Lin);
    printf("O Numero de linhas e colunas da imagem e: %d colunas e %d linhas\n", Col, Lin);
 
    v = (int *) malloc (Lin * sizeof(int *));
        for (i=0; i < Lin; i++){
            v = (int *) malloc (Col * sizeof(int ));
        }
 
    for (i = 0; i < (Lin + 4); i++)
    {
        for (j = 0; j < Col; j++)
        {
            if (i >= 4){
                fscanf(nome, "%d", &v[(i-4)][j]);
            }
        }
    }
 
    for (i = 0; i < (Lin + 4); i++)
    {
        for (j = 0; j < Col; j++)
        {
                printf("%d", *v[(i)][j]);
        }
    }
 
}
 
 
int main()
{
    int NumCol, NumLin;
    int **v;
 
    NumCol = 0; NumLin = 0;
 
    Ler_Imagem(NumCol, NumLin, &v);
    return 0;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hey '!'

 

Fazer um vetor de inteiros através da alocação dinâmica é a mais simples das tarefas em C.

Antes defina se, dinamicamente queres um vetor ou uma matriz.

Posso esta errado mais acho que seu erro foi justamente isto.

int *my_vecto (...) // pode ser representando um vetor com apenas um ponteiro para int

int **my_array (...)// ja matrizes exige que você declare inicialmente um ponteiro-de-ponteiro.

 

Lembre-se: Ponteiros-de-ponteiros, precisam ser referenciados também

Exemplo:

int **v, ***v_ptr;

v_ptr = &v;

*v_ptr = v;

 

Hint: Use calloc é uma função mais completa, além de ficar claramente o que ela faz através

de seus parâmetros, também inicializa dinâmica com valores de comprimento 0 ou NULL automaticamente.

;)

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado Mauro!

O erro na verdade estava no uso da função fscanf, mas consegui corrigi-lo.

Obrigado pela dica do calloc no lugar do malloc, eu nao sabia a diferença entre os dois comandos ^^

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×