Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
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);
}

Editado por victooorns
Melhor compreensão do texto.

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

Testei seu código no Ubuntu e só troquei o


scanf("%s", &nomearquivo);

por


gets(nomearquivo);

e compilou e rodou sem erros.

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






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

×