プロが教える店舗&オフィスのセキュリティ対策術

整数を格納した5つのノードを持つリスト構造を用意し、それを降順にソートするプログラムなのですが、途中で止まってしまいます。 (*maxp)->next=tmp;という箇所で止まってしまいます。(以下のソースコード中にコメントしてあります。)止まる理由がわかる方がいらっしゃたら、教えていただけるとありがたいです。


#include <stdio.h>
#include <stdlib.h>

struct node{
int value;
struct node *next;
};

int main(void)
{
struct node *p,*lp;

p=(struct node *)malloc(sizeof(struct node));
lp=p;
int i;
for(i=1;i<4;i++){
lp->value=1000*rand()/RAND_MAX;
lp->next=(struct node *)malloc(sizeof(struct node));
lp=lp->next;
}
lp->value=1000*rand()/RAND_MAX;
lp->next=NULL;


lp=p;
while(lp!=NULL){
printf("%d\n",lp->value);
lp=lp->next;
}


struct node **as,**maxp,*tmp,**bs;
as=&p;

while(1){
maxp=as;
bs=&(*as)->next;
while(1){
if((*maxp)->value<(*bs)->value)maxp=bs;
if((*bs)->next==NULL)break;
bs=&(*bs)->next;
}
tmp=(*as)->next;
(*as)->next=(*maxp)->next;
/*ここで止まる*/
(*maxp)->next=tmp;

tmp=*as;
*as=*maxp;
*maxp=tmp;  

if((*as)->next->next==NULL)break;
as=&(*as)->next;
}

lp=p;
while(lp!=NULL){
printf("%d\n",lp->value);
lp=lp->next;
}
}

質問者からの補足コメント

  • 「動作を停止しました。」というメッセージボックスが表示されます

    No.1の回答に寄せられた補足コメントです。 補足日時:2017/09/21 12:49

A 回答 (2件)

単純に考えると


・maxp が NULL である
・*maxp が NULL である
のどちらかじゃないかなぁ.
    • good
    • 0

止まるというのは


文字通りエラーも吐かずにそこから動かなくなるということでしょうか?
この回答への補足あり
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!