リストを用いたスタックのpush関数のセグメントエラー
Posted: 2011年9月07日(水) 00:35
学校で勉強していた内容を復習していてわからない問題があるのでおしてください。
分からないことは、リストで作ったスタックに対して、pushできる関数を作成しているのですが、セグメントエラーが出て、何を直せばいいのか分からなくて困っています。セグメントエラーはpush関数に入ると起きます。
それから、void push(struct data **top,char key);で使われているダブルポインタについても教えてほしいです。
よろしくお願いします。
[実行結果]
check
セグメンテーション違反です (コアダンプ)
分からないことは、リストで作ったスタックに対して、pushできる関数を作成しているのですが、セグメントエラーが出て、何を直せばいいのか分からなくて困っています。セグメントエラーはpush関数に入ると起きます。
それから、void push(struct data **top,char key);で使われているダブルポインタについても教えてほしいです。
よろしくお願いします。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct data{
char key;
struct data *next;
};
void print_stack_list(struct data *top);
void push(struct data **top,char key);
int main(){
struct data *top,*new;
new = (struct data *)malloc(sizeof(struct data));
new->key = 'a';
top = new;
//b
new = (struct data *)malloc(sizeof(struct data));
top->next = new;
top->next->key = 'k';
//c
new = (struct data *)malloc(sizeof(struct data));
top->next->next = new;
top->next->next->key = 'c';
printf("check\n");
// new = (struct data *)malloc(sizeof(struct data));
push(&top,'g'); //**********セグメントエラー
printf("check\n");
print_stack_list(top);
free(new);
return 0;
}
void push(struct data **top,char key){ //*******************************
struct data *new;
new = (struct data *)malloc(sizeof(struct data));
new->key = key;
while( *top !=NULL){
*top =(*top)->next;
}
(*top)->next = new;
}
void print_stack_list(struct data *top){
printf("%c",top->key);
printf("<----TOP\n");
printf("%c\n",top->next->key);
printf("%c\n",top->next->next->key);
printf("%c\n",top->next->next->next->key);
}
check
セグメンテーション違反です (コアダンプ)