Erreur de segmentation

rosate999 Messages postés 5 Date d'inscription   Statut Membre Dernière intervention   -  
rosate999 Messages postés 5 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
je suis besoin de votre aide SVP,
J'ai écrit une programme et après compilation j'ai toujours un erreur de segmentation, si quelqu'un peut m'aider.
voici une partie du programme que je pense que le problème se trouve dans cette partie:

typedef struct {
int i;
int j;
double distance;
} distance_t;

typedef struct {
int nbIndividus;
int nbVariables;
distance_t *distancesReference;
double **target;
} functionData_t;

double myfunc (unsigned n,const double *x, double *grad, void *my_func_data)
{
int i,j,k,ind1,ind2,a;
double temp,distanceCarre,numerateur,denominateur,score,distance;
int nbIndividus,nbVariables;
double **targetx, **target;
distance_t **distancesReference;

functionData_t *functionData=(functionData_t *)my_func_data;


nbIndividus=functionData->nbIndividus;
nbVariables=functionData->nbVariables;
targetx= functionData->target;
distancesReference=&(functionData->distancesReference);

numerateur=0;
denominateur=0;


for(i=0;i<nbIndividus;i++){
for(j=0;j<nbVariables;j++){
targetx[i][j]=(target)[i][j];
}
}

for(i=0;i<nbIndividus-1;i++){
ind1=distancesReference[i]->i;
ind2=distancesReference[i]->j;
distance=distancesReference[i]->distance;
distanceCarre=0;
for(k=0;k<nbVariables;k++) {
a=0;
temp=targetx[ind1][k]-targetx[ind2][k]+x[ind1*k+a]-x[ind2*k+a];
distanceCarre+=temp*temp;
a=a+1;
}
denominateur+=distanceCarre;
numerateur+=sqrt(distanceCarre)*((*distancesReference)[i]).distance;
}

score=calculScore(numerateur,denominateur);

return score;
}


4 réponses

fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Bonjour,

Comment est initialisé void * my_func_data ?

Cdlt,
0
rosate999 Messages postés 5 Date d'inscription   Statut Membre Dernière intervention  
 
Bonjour,
je n'est pas initialisé *my_func_data!! j'ai juste écrit comme celle noté dans ce site https://nlopt.readthedocs.io/en/latest/NLopt_Tutorial/ car mon problème est un problème d'optimisation et je veux utiliser NLOPT. my_func_data est une paramètre supplémentaire qui peut être utiliser dans le cas des données supplémentaires mais dans mon problème il n'y a pas des données supplémentaires donc c'est inutilisable mais il faut le mettre dans void myfunc pour éviter les erreurs dans NLOPT

cordialement,

rosate999
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Beh c'est un tort...
functionData_t *functionData=(functionData_t *)my_func_data;
nbIndividus=functionData->nbIndividus;

Si my_func_data n'est pas initialisé, comment veux-tu que functionData puisse pointer sur quelque chose (nbIndividus par exemple)... Plantage assuré.
Il faut l'initialiser. En plus sur le site que tu donnes, l'initialisation semble être faite.
0
rosate999 Messages postés 5 Date d'inscription   Statut Membre Dernière intervention  
 
où l'initialisation a été faite sur le site? est ce que ça peut être initialiser dans le programme ecrite du NLOPT?
0