segmentation fault gcc

Iniciado por perseo, 23 de Outubro de 2008, 16:05

tópico anterior - próximo tópico

perseo

Boa tarde a todos estou com um problema, tenho um programa que quero rodar e nao consigo tipo ele compila e roda nomal so que quando eu entrou com o parametro que preciso ele da segmentation fault, eu tenho instalado na minha maquina o ubuntu 8.04.1 64 bits ahe nao sei se se possa ter algo a ver ja que na maquina de um amigo meu que tem o ubuntu 7.04 32 bits ele funciona direitinho.
Agradeço a atenção,

Felix

Talvez se você disser qual o programa que está tentando executar seja mais fácil alguém poder ajudá-lo, pois possam ter passado pelo mesmo problema e saibam como resolver, com poucos detalhes assim é muito difícil.

Darcamo

Na verdade não é muito difícil. É praticamente impossível.
Segmentation fault é um erro bem genérico que pode ocorrer de diversas maneiras, mas em geral significa que você tentou acessar alguma região de memória que não deveria.

Ex: usar um (ponteiro) objecto que não foi criado/inicializado, tentar escrever fora de algum container, etc.

Você pode rodar o programa no debugger e ver em que linha ele para. Muitas vezes apenas olhando as linhas perto da linha com o problema é suficiente para detectar a causa.
Posta aqui ao menos as linhas em volta da linha em que ele da o segmentation fault.

perseo

Peço disculpas eu nao mencionei qual era o programa que queria rodar bom e um programa feito em linguagem c (mexe com estruturas de dados e ele é composto por 12 arquivos .c e 3 .h) que estou analizando e tento rodar ele via gcc ele tem um arquivo makefile e como mencionei antes em outras maquinas ele compila e roda normal sem e com o parametro de teste so na minha maquina so compila e roda mas quando entro com o parametro de teste ele da segmentation fault. Eu ainda nao debugei ele na minha maquina mais tipo tentei dar uns printf para ver ate onde ele chegava e dava esse erro de segmentação mas mesmo que coloquei um printf na primeira linha do codigo do arquivo principal ele nao imprime nada so da segmentation fault e se digamos coloco uns \n no printf ele da os pula linha e imprime segmentation fault mais sem imprimir o conteudo do printf. A seguir mostra o arquivo makefile do programa

##############################################################
# Makefile for Unfolder

TARGET = mole mci2dot
LIBS =
FLAGS =
INCLUDES =

##############################################################

DEBUG = -O3
WARNINGS = -Wall

CC = gcc $(DEBUG) $(INCLUDES) $(WARNINGS) $(FLAGS)
SHELL = /bin/sh

TMPFILES =

OBJECTS = main.o common.o readlib.o \
     netconv.o nodelist.o readpep.o mci.o \
     unfold.o marking.o pe.o order.o
    
default: $(TARGET)

clean:
   rm -f $(OBJECTS) $(TMPFILES) $(TARGET) core* *.output *.d .deps gmon.out

mole: $(OBJECTS)
   $(CC) $(OBJECTS) -o mole

# Dependencies

%.d: %.c
     $(SHELL) -ec '$(CC)  -MM $? | sed '\''s/$*\.o/& $@/g'\'' > $@'

DEPS = $(OBJECTS:%.o=%.d)

.deps: $(DEPS)
   echo " " $(DEPS) | \
   sed 's/[    ][    ]*/#include /g' | tr '#' '\012' > .deps

include .deps


Agradeço pela atenção e bom nao sei eu tentei mudar de versão do gcc mais mesmo assim nao deu mto certo ae nao sei se e por causa de versão o se for por causa da minha maquina o se for o ubuntu 8.04.1 64 bits, ja que outros programas que eu tenho que trabalham com estrutura de dados eles funcionam normal so esse que da esse problema

fpissarra

Hummm.... sem ter acesso aos fontes é difícil estabelecer um diagnóstico. Como já dito, "segmentation fault" é bem genérico e é causado, na maioria das vezes, por uso de ponteiros NULL ou que apontem para regiões erradas da memória.

Notei uma coisa estranha no Makefile: O símbolo DEBUG é definido como -O3? Assim vc não poderá depurar a aplicação!

yzarc

passei dois dias com uma amiga pra achar o q fazia um segmentatio fault no programa dela. vou te dar o mesmo conselho q dei a ela, instale uma IDE q te permita compilar e debugar rapidamente (nós usamos eclipse). procure por erros em alocamento e desalocamento de memória, provavelmente o erro não está onde o código pára mas sim bem antes. veja se vc ta usando free corretamente, se ta alocando corretamente também. use de comentar blocos q aloquem ou desaloquem memória. no nosso caso eram dois erros, um delete[] em uma variável q era usada depois e um "free's" (código de um terceiro) q tinha sido mal programado.
dica, se possível deixe o c++ de lado, use java e seja feliz.
; Linux is almost there!