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.