Oie, acho que entendi. Fiz um teste básico e deu certo, então tentei implementar no meu programa da seguinte maneira:
typedef struct Dados{
double beta;
}Forcas_inf;
int main(int argc, char* argv[]){
...
Forcas_inf *dados = ( Forcas_inf* ) malloc ( sizeof( Forcas_inf ) ); // Criamos dinamicamente os dados que expandirão a estrutura reb_particle
int pi = 0;
while(r->N<2){
struct reb_particle p = {0};
p.hash = pi;
double ratio = 1; //[micrometro]
double densityP = 1; //[g.cm^-3]
betaparticles = 0.6/(ratio * densityP);
p.ap = (void*)dados; // Fazemos que o ponteiro generico ap aponte aos dados que queremos adicionar a reb_particle
((Forcas_inf *)p.ap)->beta = betaparticles; // Agora para entender essa linha leia abaixo:
printf("\n\n%lf\n\n", ((Forcas_inf *)p.ap)->beta);
double a = 97700e3; // pico do anel mu
double e = 0;//0.01; //excentricidade
double inc = 0; //inclinação da particula no plano
double Omega = 0; //Longitude do nó ascendente
double omega = 0; //pericentro
//double f = reb_random_uniform(0,2.*M_PI); //verdadeira anomalia
double f = 0; //verdadeira anomalia
double m = 0; //massa
//Retorna uma estrutura da partícula com os parâmetros orbitais
p = reb_tools_orbit_to_particle(r->G,planet,m,a,e,inc,Omega,omega,f);
p.r = ratio*1e-6;
reb_add(r, p);
pi++;
}
for (int i=1;i<r->N;i++){
struct reb_particle p = r->particles[i];
printf("\n\n%lf\n\n", ((Forcas_inf *)p.ap)->beta);
}
...
}
É ai que ocorre o problema, aquele printf dentro do while funciona, agora o fora que esta dentro do for esta dando erro:
/opt/torque/mom_priv/jobs/175884.saturn.cluster.loc.SC: line 7: 13004 Segmentation fault (core dumped) nice -n 19 ./rebound
Já garanti no for que nenhuma partícula que não tenha o beta esteja sendo utilizada ali.