un problème d'adressage! (enfin!peut etre ) - C - Programmation
Marsh Posté le 09-05-2005 à 13:24:53
sam15 a écrit : |
Marsh Posté le 09-05-2005 à 13:33:59
as tu lu l'explication d'Emmanuel Delahaye à propos de l'allocation de tableaux de pointeurs ? en plus, c'est toi qui avait ouvert le topic !
http://forum.hardware.fr/forum2.ph [...] ash_post=0
Marsh Posté le 09-05-2005 à 13:34:38
Je dirais (*y)[i] à la place de *(y[i]).
PS : Harkonnen : Je ne pense pas que ce soit un tableau à 2D ici, mais il passe juste un double pointeur pour modifier le pointeur de la fonction appelante.
Marsh Posté le 09-05-2005 à 13:37:44
oui mais là c pas un problème d'allocation de mémoire mais de passage par adresse ! mon vecteur Y de main ne se remplit pas après ma procédure .
Marsh Posté le 09-05-2005 à 13:41:18
Par contre je comprend pas la ligne la :
y=malloc(sizeof(double));
dans le main car le malloc doit être fait dans la fonction.
En plus la fonction "image_vect" n'est même pas appelée...
Marsh Posté le 09-05-2005 à 13:45:40
j'ai essayé ce que t'as dit "tarabiscote" (merci).
mais bizarrement, juste la première coordonnée est transmise au vecteur y du main.
Marsh Posté le 09-05-2005 à 13:48:30
c'est juste que j'ai fait copier coller à 2 instants différents (entre temps j'ai changé les nom en fait dans le main c
image_vect(mat,x,&y)au lieu al_prod_mat_vect(mat,x,&y)) dc j'appelle bien la procédure au dessus !
Marsh Posté le 09-05-2005 à 13:55:13
Tu peux modifier ce que t'as fait dans le 1er post et en profiter pour mettre les balises [fixed] ?
PS :
*(y[i]) =*(y[i])+ mat[i][j]*x[j];
après correction ->
(*y)[i] =(*y)[i]+ mat[i][j]*x[j];
(*y)[i] n'est pas initialisé donc la valeur sera totalement arbitraire.
Marsh Posté le 09-05-2005 à 13:59:05
1- met le code entre les balises.
2- Chercher l'erreur ...
Code :
|
3- Chercher les erreurs :
Code :
|
matrice, c'est quoi ?
Marsh Posté le 09-05-2005 à 14:05:31
++fab a écrit : 1- met le code entre les balises.
|
c'est un type que j'ai déja défini :
typedef double **matrice ;
Marsh Posté le 09-05-2005 à 14:49:34
sam15 a écrit : onjour tout le monde |
Un peu plus de rigueur et de simplicite dans le codage permet d'améliorer la qualité du code et de trouver les bugs.
http://mapage.noos.fr/emdel/notes.htm#malloc
http://mapage.noos.fr/emdel/notes.htm#portee
edit: Mise au point
|
Mais si cette taille '3' est fixe, pourquoi utiliser de l'allocation dynamique ?
Marsh Posté le 09-05-2005 à 15:46:15
++fab a écrit : for (i = 0; i < 3; i++) il me semble |
Roasted!
Marsh Posté le 09-05-2005 à 13:20:58
onjour tout le monde
voilà je vous passe une petite procédure permettant de calculé limage d'un vecteur par une matrice(Y=mat*X) :
void image_vect(matrice mat,double *x,double **y){
int i;
*y=malloc(3*sizeof(double));
int j;
for(i=0;i<3;i++)
{
for(j=0;j<3;j++){
*(y[i]) =*(y[i])+ mat[i][j]*x[j];
}
}
}
......> c'est sensé remplir le vecteur ("le tableau" ) Y à partir d'une matrice mat et un vecteur X donnés.
et voiçi mon main :
int main (){
int i;
matrice mat;
double *x;
double *y;
x=malloc(sizeof(double));
y=malloc(sizeof(double));
*x=2;
*(x+1)=2;
*(x+2)=9;
mat= malloc( sizeof(double *) *3 );
for(i = 0;i < 4;i++)
{
mat[i] = malloc( sizeof(double) *3 );
}
mat[0][0]=4;
mat[0][1]=0;
mat[0][2]=0;
mat[1][0]=0;
mat[1][1]=1;
mat[1][2]=0;
mat[2][0]=0;
mat[2][1]=0;
mat[2][2]=2;
al_prod_mat_vect(mat,x,&y);
printf("les cordonnées de l'image sont %f %f %f",*y,y[1],y[2]);
return EXIT_SUCCESS;
}
MAIS malheureusement en sortant de la procédure le vecteur y n'est pas le bon! sachant qu'il est bien calculé à l'intérieur de la procédure . c'est probablement un problème d'adressage.
Vous en pensez quoi ?
MERCI