Простая реализация стека с использованием C - PullRequest
2 голосов
/ 17 июля 2011

Я написал программу на C для реализации простого стека. Но в моей программе возникает ошибка сегментации, и мне трудно понять, в чем дело. Может ли кто-нибудь помочь,

   #include<stdio.h>
   #include<stdlib.h>
   struct stack_structure{
     int stack_array[10];
     int stack_pointer;
   };
   void push_into_stack(struct stack_structure *,int);
   int main(){
     int no = 8;
     struct stack_structure *st;
     st->stack_pointer = -1;
     push_into_stack(st,no);
     return 0;
   }
   void push_into_stack(struct stack_structure *s,int no){
     s -> stack_pointer++;
     s -> stack_array[s -> stack_pointer] = no;
   }

Ответы [ 3 ]

6 голосов
/ 17 июля 2011
struct stack_structure *st;

Это только создает указатель на struct stack_structure.Он не выделяет память для самого struct stack_structure.

Вы можете попробовать это:

struct stack_structure st;
st.stack_pointer = -1;
push_into_stack(&st,no);

Другой вариант - динамическое выделение (и освобождение) этой структуры:

struct stack_structure *st = malloc(sizeof(struct stack_structure));
...
// when you're done with it
free(st);
4 голосов
/ 17 июля 2011

Смотрите эти строки:

 struct stack_structure *st;
 st->stack_pointer = -1;

Вы объявили переменную указателя, но затем вы используете ее неинициализированной. Указатель должен указывать на что-то, а этому не на что указывать. Простейшим решением было бы изменить эти строки на:

 struct stack_structure st1, *st=&st1;
 st->stack_pointer = -1;
0 голосов
/ 17 июля 2011

Вам нужно выделить немного места для структуры:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...