Segmentation Fault - Qual o problema? [RESOLVIDO]

1. Segmentation Fault - Qual o problema? [RESOLVIDO]

Felipe
felipebil

(usa Debian)

Enviado em 18/11/2008 - 20:21h

Olá pessoal,
estou com um problema para rodar um programa em C, e não consigo descobrir a solução.

É um código bem simples, mas que envolve muita memória, algo como uma matriz double com 10milhões de elementos. O programa roda normalmente se eu diminuo o tamanho de algumas dessas matrizes, mas quando coloco o tamanho desejado ele dá segmention fault. Como ele funciona às vezes acredito que o problema seja de memória. Acontece que os computadores que estou usando tem muita memória (ao menos deveria).

Usei o comando "ulimit -s unlimited" no bash e aparentemente isso ajudou um pouco, mas não resolveu o problema. Tentei também liberar memória ao longo da execução com o malloc e o free, mas não adiantou. Eu sei que alguns programas bem maiores rodam nessa máquina, então preciso de uma ajuda pois não sei o que fazer.

Abaixo só a declaração das variáveis, para vcs terem uma idéia.
------------------------------------------------
#define T_MIN 5000
#define T_MAX 15000
#define E_MIN 0.0
#define E_MAX 0.1
#define E_NUM 100
#define N_MAPS 1000

int main(void){

int tempo, map, e, i, start, end;
int y_maxtab[N_MAPS][T_MAX/100], k[N_MAPS], n_ymax[N_MAPS];
double eps, coup, step = (double)(E_MAX-E_MIN)/(double)(E_NUM-1);
double mean, new_x;
double alfa[N_MAPS], x0[N_MAPS], y0[N_MAPS];
double x_dat[N_MAPS], y_dat[N_MAPS][T_MAX];
double rnmed_tab[2][E_NUM], rn_tab[T_MAX];
double mcos, msin, fi,deno;
-----------------------------------------
a matriz y_dat é a que envolve mais dados.


  


2. Re: Segmentation Fault - Qual o problema? [RESOLVIDO]

yurick gomes
yurick

(usa Debian)

Enviado em 19/11/2008 - 01:57h

pow o problema não é na declaração das matrizes,
como vc mesmo falou, tua maquina tem muita memória,
mas talvez eseja na forma como vc está lidando com
as matrizes, tentando ler alguma posição inexistente,
ou tentando acessar antes da alocação, etc.
tenta verificar isso, qlq coisa pode postar! flws


3. Ctrl+C

Davi das Chagas Neves
davi.fisica

(usa Outra)

Enviado em 19/11/2008 - 04:02h

Amigo, cuidado com o Ctrl+C... hehehe
Este tipo de problema acontece quando vc quer colocar mais coisas na matriz do que ela suporta... tenho duas dicas:
Primeira:
Tenta aumentar o tamanho da Matriz... só o tamanho da matriz...
Segunda:
Tenta copiar um código mais novo na internê... esse aí é muito velho... nem animei a lê-lo... qq coisa me passa exatamene o q vc quer fazer... posso tentar te ajudar...

[]s


4. Re: Segmentation Fault - Qual o problema? [RESOLVIDO]

Felipe
felipebil

(usa Debian)

Enviado em 19/11/2008 - 12:53h

valeu yurik,
mas tenho certeza de que o problema não está na indexação das matrizes. Já verifiquei atentamente, inclusive reescrevi o código inteiro e o problema continuou. como falei anteriormente o programa funciona se eu reduzo, por exemplo os parâmetros T_MAX e N_MAPS, mas a partir de determinados valores ele volta a dar pau. Quando eu aumentei a stack memory com o comando "ulimit -s" ele melhorou, mas dava segmentation fault com valores maiores dos parâmetros.
aliás também debuguei com o gdb, e teria descoberto se fosse algum erro no código. mas ele parava o programa logo no começo, em rotinas simples, sem motivo aparente.

davi,
não entendi o que você quis dizer com ctrl+c, ou código antigo. Este trecho q eu postei trata-se do cabeçalho do meu programa, que eu mesmo escrevi. Mas é apenas a declaração das variáveis, então não perde nada se não lê-lo. Era só um informação adicional. eu quero é fazer o programa rodar, então queria entender se consigo mudar algum parâmetro de sistema no linux, ou se preciso reescrever o código de modo a administrar melhor a memória.

um abraço!


5. Re: Segmentation Fault - Qual o problema? [RESOLVIDO]

Marcelo A. B. Slomp
mslomp

(usa Slackware)

Enviado em 19/11/2008 - 18:39h

mande aí um testcase, fica mais fácil ajudar


6. ajuda

jose
jose_gustavo

(usa Fedora)

Enviado em 29/04/2009 - 18:56h

Felipe, você conseguiu resolver o seu problema? porque acredito que é o mesmo que eu tenho.

Abraços


7. Solução

Felipe
felipebil

(usa Debian)

Enviado em 30/04/2009 - 01:37h

Bom cara, resolvi mas como já faz algum tempo não lembro bem qual foi o fator decisivo para isso. No final das contas eu reescrevi o programa inteiro melhorando o código e usando malloc e free para trabalhar com matrizes. além disso passei a usar o icc para compilar, otimizando para rodar com multiprocessadores. Tente revisar o código com cuidado e modificar qualquer coisa que possa gerar problema ou esteja confusa. Se tiver certeza que o problema é de memória tente dividir o programa em alguns programas menores, já pode resolver.
Abraço






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts