数値が勝手に変わってしまうのです。

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ひよこ

数値が勝手に変わってしまうのです。

#1

投稿記事 by ひよこ » 15年前

特定の条件(リストが3つあるときに)でp->xが1に書き換えられてしまうのです。
下のソースで、おかしい部分はないと思うのですが、
デバッグで見ていくと、ここで変わっているようなのです。
どこがおかしいと思われますか?
typedef struct door_t{
    int x,y;
    int state;
    door_t *next;
};
door_t *head_door;グローバル変数です。
#define COUNT_MAX 30
void out_hantei(){
    door_t *p=head_door;
    int counter=0;
    while(p!=NULL){
        p->x=(rand()%20)*32;//(1)
        p->y=(rand()%16)*30;
        printfDx("%d.%d\n",p->x,p->y);
        if(p!=head_door){
            if(p->x=head_door->x && p->y==head_door->y){
                while(p->x==head_door->x && p->y==head_door->y){//(2)
                    p->x=(rand()%20)*32;    
                    p->y=(rand()%16)*30;
                    printfDx("%d.%d\n",p->x,p->y);
                }
            }
        }        
        p=p->next;        
        counter++;
    }
    if(counter<COUNT_MAX){
        int x=(rand()%20)*32,y=(rand()%16)*30;
        printfDx("%d.%d\n",x,y);
        enter_door(x,y,1);
        //enter_door((rand()%20)*32,(rand()%16)*30,1);
    }//enter_door(0,0,1);
}
で最初(head_door)のときは(1)の部分で
0x023649a8 {x=576 y=420 state=0 next=0x02361288 }//最初
0x02361288 {x=0 y=0 state=1 next=0x023612d8}//2番目。
0x023612d8 {x=160 y=30 state=1 next=0x00000000}//最後

で二回目(head_door->next)のときは(1)の部分で
head_door = 0x023649a8 {x=32 y=330 state=0 next= 0x02361288}//最初
head_door->next = 0x02361288 {x=0 y=0 state=1 next =0x023612d8}//2番目。
(head_door->next)->next = 0x023612d8 {x=160 y=30 state=1 next = 0x00000000}//最後

で(2)の部分で
head_door =0x023649a8 {x=32 y=330 state=0 next=0x02361288}//最初
head_door->next=0x02361288 {x=1 y=330 state=1 next=0x023612d8}//2番目。
(head_door->next)->next =0x023612d8 {x=160 y=30 state=1 next=0x00000000}//最後
となって書き変わってしまうのです。どこが原因だと思われますか?

MNS

Re:数値が勝手に変わってしまうのです。

#2

投稿記事 by MNS » 15年前

×if(p->x=head_door->x && p->y==head_door->y){
◯if(p->x==head_door->x && p->y==head_door->y){

ひよこ

Re:数値が勝手に変わってしまうのです。

#3

投稿記事 by ひよこ » 15年前

あっ、=が一個足りませんね。二日悩んだものがあっさりと直りました。
デバッグは難しいですね。
MNSさんありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る