
Envoyé par
Joel F
et bon, std::vector et ces problemes disparaissent ...
+++++++

Envoyé par
LB_99
Le problème est que mon tableau xx est modifié entre les deux affichages (qui sont commentés ici). Je ne vois pas trop pourquoi...
Ecrasement du à un problème d'indice a été ma première idée. Du coup, j'ai lu ton code et là :

Envoyé par
LB_99
1 2 3 4 5 6 7 8 9 10 11
|
for(j=0 ; j<n ; j++,vv++) *vv=0;
for(j=0;j<n;j++)
{
valx = xx[j];
for(ii=tableau_p[j]; ii<tableau_p[j+1];ii++)
{
vv[tableau_i[ii]]+= valx * tableau_valeur[ii];
}
} |
Comme le dit bruno, tu as modifié ton pointeur (pas la valeur pointée, mais l'adresse) de vv. Si n est la taille allouée pour vv, alors le pointeur désigne la fin de la zone mémoire valide et va commencer à jardiner 
1 2 3 4 5 6 7 8 9 10 11
|
for(j=0 ; j<n ; j++) vv[j]=0.;
for(j=0;j<n;j++)
{
valx = xx[j];
for(ii=tableau_p[j]; ii<tableau_p[j+1];ii++)
{
vv[tableau_i[ii]]+= valx * tableau_valeur[ii];
}
} |
Note que const peut aussi s'utiliser sur l'adresse d'un pointeur et non sur la valeur pointée. Tu peux alors surveiller que tu ne changes pas cette adresse dans ta fonction :
void fonction(double const * const xx, double * const vv)
Enfin, pour mettre au point, je mettrai des assert sur les indices pour détecter ces erreurs.
Partager