Erreur de segmentation

Fermé
rosate999 Messages postés 5 Date d'inscription mercredi 22 janvier 2014 Statut Membre Dernière intervention 24 janvier 2014 - 22 janv. 2014 à 16:02
rosate999 Messages postés 5 Date d'inscription mercredi 22 janvier 2014 Statut Membre Dernière intervention 24 janvier 2014 - 23 janv. 2014 à 17:01
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 samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 841
22 janv. 2014 à 21:53
Bonjour,

Comment est initialisé void * my_func_data ?

Cdlt,
0
rosate999 Messages postés 5 Date d'inscription mercredi 22 janvier 2014 Statut Membre Dernière intervention 24 janvier 2014
Modifié par rosate999 le 23/01/2014 à 11:36
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 samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 841
23 janv. 2014 à 11:56
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 mercredi 22 janvier 2014 Statut Membre Dernière intervention 24 janvier 2014
23 janv. 2014 à 17:01
où l'initialisation a été faite sur le site? est ce que ça peut être initialiser dans le programme ecrite du NLOPT?
0