スタックについて
スタックを実現するプログラムを作っているのですが、実行するとセグメテーション違反が表示されます。でもどこが間違っているのかわかりません!どうしたらいいのでしょう?
#include<stdio.h>
#include<stdlib.h>
struct stack{
int max;
int used;
int *array;
};
struct stack *
stack_create(int n)
{
struct stack *s;
int i;
s->array=(int *)malloc(sizeof(int)*n);
s->used=0;
s->max=n;
return 0;
}
void
stack_free(struct stack *s)
{
free(s);
}
int
stack_push(struct stack *s,int datum)
{
if(s->used>=s->max){
return 0;
}
s->array[s->used]=datum;
s->used++;
return 1;
}
int
stack_pop(struct stack *s,int *datump)
{
if(s->used<=0){
return 0;
}
*datump=s->array[s->used-1];
s->used--;
return 1;
}
int
stack_is_empty(const struct stack *s)
{
return s->used==0;
}
int main()
{
struct stack s;
int i,p;
int n;
scanf("%d",&n);
stack_create(n);
for(i=0;i<=5;i++){
stack_push(&s,i);
printf("push%2d\n",i);
}
for(i=1;i<=3;i++){
stack_pop(&s,&p);
printf("pop%2d\n",p);
}
}
お礼
ご回答ありがとうございます。 左一軸だけを取ると確かにミート率は上がりそうな感じですね。 ただし、スタック&ティルト理論だと、バックスイングの時点で左足にウェイトシフトするんですよね。 ギッタンバッコンにならないか心配です。 とにかく、一度レンジで試してみます。