構造体のメンバ変数が途中で変化してしまう
下にあるプログラムでコメントが書いてある部分の"Tmp->x"の値が途中で期待していない変化をします。何回も見ても特に操作していないと見てしまいますが、構造体変数の扱い方がおかしいのでしょうか?
struct zahyo *MpCalculate(struct zahyo *P,int a,int multiple,int prime)
{
struct zahyo *kp,*Tmp;
int i,u,r;
kp=(struct zahyo*)malloc(sizeof(struct zahyo));
kp->x=P->x;
kp->y=P->y;
if(multiple == 1) return kp;
u=myu(P,a,prime);
kp->x=x3_PequalQ(P->x,u,prime);
kp->y=y3(P,kp,u,prime);
if(multiple == 2) return kp;
printf("2Py(%d,%d)\n",kp->x,kp->y);
//P≠Q
for(i=3; i<=multiple; i++){
/*Tmp->xを表示させているDの部分で値が期待しない変化をします*/
Tmp=kp;
A: printf("A:Tmp->x=%d\n",Tmp->x);
r=rmd(Tmp,P,prime);
B: printf("B:Tmp->x=%d\n",Tmp->x);
kp->x=x3_PnotQ(Tmp,P,r,prime);
D: printf("D:Tmp->x=%d\n",Tmp->x);
kp->y=y3(Tmp,kp,r,prime);
printf("%dPy(%d,%d)\n",i,kp->x,kp->y);
}
return kp;
}
int rmd(struct zahyo *P,struct zahyo *Q,int prime)
{
unsigned int m,n;
m=mod(Q->x - P->x,prime);
n=mod(Q->y - P->y,prime);
exeuclid(m,prime,1,0,0,1);
return mod(aa*n,prime);
}
int x3_PnotQ(struct zahyo *P,struct zahyo *Q,int rmd,int p)
{
/*ここでもTmp->x(P->x)の値は操作されていません*/
C:printf("C:Tmp->x = %d\n",P->x);
return mod((int)pow(rmd,2) - P->x - Q->x,p);
}
実行結果
A:Tmp->x=10
B:Tmp->x=10
C:Tmp->x=10
D:Tmp->x=5
常にDの部分で変わってしまいます。
このように変化する原因が分かる方、回答よろしくお願いします。
お礼
回答ありがとうございます。ご指摘のとおりよく見れば同じでした。 しかし、疑問はまだ解決していないため、関連した質問を新たにたてようと思います。よろしければそちらにも回答お願いします。