Ir ao conteúdo
  • Cadastre-se
victooorns

C: falha de segmentação (imagem do núcleo gravada)

Recommended Posts

Boa tarde, estou fazendo um programa que lê imagens do tipo .pgm e mostra suas dimensões, quantidade de pixels e escala máxima de cinza. Esse formato é composto por um cabeçalho que tem duas linhas iniciais (que você pode desprezar) e, em seguida, há uma linha de texto com o número de pixels de largura e de altura da imagem. A linha seguinte contém o valor máximo de escala de cinza para a imagem. Posteriormente são listados os bytes que compõem a imagem. Cada byte representa um pixel.

Exemplo:

P2

# CREATOR: GIMP PNM Filter Version 1.1

800 600

255

1

92

97

94

...

93

O problema é que, após ler as dimensões e a escala de cinza da imagem, dá um erro de falha de segmentação (imagem do núcleo gravada).

#include <string.h>
#include <stdio.h>
#include <stdlib.h>

int main () {
char nomearquivo[50], c;
char *img = (char*) malloc (sizeof(char));
char **dados = (char**) malloc (sizeof(char*));
unsigned char *pixels;
int i=0, j=1, altura = 0, largura = 0, maximo=0;
FILE *arq;
scanf("%s", &nomearquivo);
arq=fopen(nomearquivo, "rb+");
fseek(arq, SEEK_SET, 0);
while (i<4){
c = 0;
while (c != '\n'){
c = fgetc(arq);
if (i>1){
img = (char*) realloc (img, j*sizeof(char));
img[j-1] = c;
j++;
}
}
i++;
//O erro acontece aqui, após passar pelo último while
}
dados[0] = strtok(img, "\n ");
dados[1] = strtok(NULL, "\n ");
dados[2] = strtok(NULL, "\n ");
maximo = atoi(dados[0])*atoi(dados[1]);
printf("%s\n%s\n%s\n%d\n", dados[0],dados[1],dados[2], maximo);

pixels = (unsigned char *)malloc(maximo);
fread (pixels, 1, maximo, arq);
fclose(arq);
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não sei se isso vai ajudar mas, hoje eu estava tendo o mesmo problema.

Quando eu fazia isso no meu codigo:

atoi(argv[1])

Dava essa mensagem quando eu executava o programa,

Daí eu substitui por isso...

atoi((const char*)argv[1])

E a mensagem parou de aparecer...

Falou!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado, Deadrools, mas testei e não resolveu o erro. Acontece que falha de segmentação acontece quando o sistema tenta pegar um endereço inexistente de memória, então devo estar realocando errado de alguma forma que eu não identifiquei!

Compartilhar este post


Link para o post
Compartilhar em outros sites

kid gumer, os printf funcionaram normalmente?

Fiz a troca que você falou, mas mesmo assim dá falha de segmentação e não exibe os valores! (Compilei no Ubuntu também.)

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

×