Enviado em 12/07/2013 - 14:53h
Olá pessoal, estou fazendo um programa que lê três arquivos de dados e os reescreve em um arquivo. Isso é relativamente simples, entretanto estou trabalhando com arquivos grandes e consequentemente com vetores grandes, esse código funcionava para vetores pequenos, só que agora ele simplesmente parou de funcionar para qualquer situação. Compilo usando o gcc, não aparece nenhum erro, quando executo ele dá Falha de segmentação logo que começa a execução. Fiz o debug e novamente ele para a execução logo no início, não consegui chegar a conclusão alguma.
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
main()
{
int i,j,n,b,R,S;
float N,M,a;
double dens[5000000],vth[5000000], vrad[5000000],rad[5000000],theta[5000000],x[5000000],y[5000000],vx[5000000],vy[5000000],P, T;
R= 1200; /*Nrad*/
S= 3600; /*Nsec*/
N= 0.4; /*Rmin*/
M= 2.5; /*Rmax*/
FILE *arq1;
FILE *arq2;
FILE *arq3;
FILE *gaspol;
FILE *gascart;
/******************************Abertura dos arquivos**********************/
arq1 = fopen("gasdens.dat","r+");
arq2 = fopen("gasvtheta.dat","r+");
arq3 = fopen("gasvtheta.dat","r+");
gaspol = fopen("gaspol.dat","w");
gascart = fopen("gascart.dat","w");
/****************Leitura********************************/
i=0;
while(!feof(arq1))
{
fscanf(arq1,"%le",&dens[i]);
//printf("Do 1 %le ",dens[i]);
i++;
}
i=0;
while(!feof(arq2))
{
fscanf(arq2,"%le",&vth[i]);
//printf("Do 2 %le ",vth[i]);
i++;
}
i=0;
while(!feof(arq3))
{
fscanf(arq3,"%le",&vrad[i]);
//printf("Do 3 %le ",vrad[i]);
i++;
}
/********************Conversões e escrita**********************/
a=0;
for(n=0;n<R;n++)
{
for(j=a;j<(S*(n+1));j++)
{
rad[j]= N + ((M-N)*n/R);
}
a=j;
}
P=(M_PI*2/S);
T=-(2*M_PI/S);
for(b=0;b<=i;b++)
{
T= T + P;
if(T<=(2*M_PI))
{
theta[b]=T;
}
else
{
T=0;
theta[b]=0;
}
}
for(j=0;j<=i;j++)
{
x[j]=rad[j]*cos(theta[j]);
y[j]=rad[j]*sin(theta[j]);
vx[j]=vrad[j]*cos(theta[j])-vth[j]*rad[j]*sin(theta[j]);
vy[j]=vrad[j]*sin(theta[j])+vth[j]*rad[j]*cos(theta[j]);
}
for(b=0;b<=i;b++)
{
fprintf(gaspol," %le ",rad[b]);
fprintf(gaspol," %le ",theta[b]);
fprintf(gaspol," %le ",dens[b]);
fprintf(gaspol," %le ",vth[b]);
fprintf(gaspol," %le \n",vrad[b]);
}
for(b=0;b<=i;b++)
{
fprintf(gascart," %le ",x[b]);
fprintf(gascart," %le ",y[b]);
fprintf(gascart," %le ",dens[b]);
fprintf(gascart," %le ",vx[b]);
fprintf(gascart," %le \n",vy[b]);
}
printf("i %d \n",i);
printf("b %d \n",b);
printf("j %d \n",j);
printf("R %d \n",R);
printf("S %d \n",S);
printf("n %d \n",n);
fclose(arq1);
fclose(arq2);
fclose(arq3);
fclose(gaspol);
fclose(gascart);
}
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Como renomear arquivos de letras maiúsculas para minúsculas
Imprimindo no formato livreto no Linux
Vim - incrementando números em substituição
Efeito "livro" em arquivos PDF
Como resolver o erro no CUPS: Unable to get list of printer drivers
Recuperar arquivos de HD em formato RAW usando Linux (0)
SysAdmin ou DevOps: Qual curso inicial pra essa área? (0)
Melhores Práticas de Nomenclatura: Pastas, Arquivos e Código (3)
[Python] Automação de scan de vulnerabilidades
[Python] Script para analise de superficie de ataque
[Shell Script] Novo script para redimensionar, rotacionar, converter e espelhar arquivos de imagem
[Shell Script] Iniciador de DOOM (DSDA-DOOM, Doom Retro ou Woof!)
[Shell Script] Script para adicionar bordas às imagens de uma pasta