Ir ao conteúdo
  • Cadastre-se

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


Tolledo

Posts recomendados

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;
Link para o comentário
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
Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois...
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...