Hi so i am going through my code step by step to avoid missi
Hi, so i am going through my code step by step to avoid missing up.
here my code crashes when i enter my input
if you could take a look and tell me what causes crashing my program
 #include<stdio.h>
 #include<string.h>
 #include <stdlib.h>
 #define TRUE 1
 #define FALSE 0
 #define MAX 300
typedef struct StackStruct
 {
 char* expression; /* pointer to dynamic array */
 int size; /* amount of space allocated */
 int top; /* top of stack indicator */
 } Stack;
void init (Stack* s)
 {
 s->size = 2;
 s->expression = (char*) malloc ( sizeof (char) * s->size );
 s->top = 0;
 }
void push (Stack* s, char val)
 {
 /* check if enough space currently on stack and grow if needed */
/* add val onto stack */
 s->expression[s->top] = val;
 s->top = s->top + 1;
 }
int isEmpty (Stack* s)
 {
 if ( s->top == 0)
 return TRUE;
 else
 return FALSE;
 }
 int top (Stack* s)
 {
 return ( s->expression[s->top-1] );
 }
void pop (Stack* s)
 {
 s->top = s->top - 1;
 }
 int checkBalanced( char expression[] )
 {
 Stack *s;
 int i;
 char paranthesis;
 for( i=0; i<strlen(expression); i++){
    
        paranthesis=expression[i];
    if(paranthesis==\'{\'||paranthesis==\'<\'||paranthesis==\'[\'||paranthesis==\'(\')
     push (&s,paranthesis);
      
    else if(paranthesis==\'}\'||paranthesis==\'>\'||paranthesis==\']\'||paranthesis==\')\')
     {
      
       if(isEmpty (&s)){
           return FALSE;
            }
            else{
               pop (&s);
            }
        }
 }
   
    return isEmpty (s) ? TRUE:FALSE;
 }
int main(int argc,char *argv[]){
    Stack *s;
    init (&s);
   char expression[300];
 fgets(expression, MAX, stdin);
   
 checkBalanced(expression);
   
return 0;
   
 }
Solution
Try this code and let me know if it works:
#include<stdio.h>
 #include<string.h>
 #include <stdlib.h>
 #define TRUE 1
 #define FALSE 0
 #define MAX 300
 typedef struct StackStruct
 {
 char* expression; /* pointer to dynamic array */
 int size; /* amount of space allocated */
 int top; /* top of stack indicator */
 } Stack;
 void init (Stack* s)
 {
 s->size = 2;
 s->expression = (char*) malloc ( sizeof (char) * s->size );
 s->top = 0;
 }
 void push (Stack* s, char val)
 {
 /* check if enough space currently on stack and grow if needed */
 /* add val onto stack */
 s->expression[s->top] = val;
 s->top = s->top + 1;
 }
 int isEmpty (Stack* s)
 {
 if ( s->top == 0)
 return TRUE;
 else
 return FALSE;
 }
int top (Stack* s)
 {
 return ( s->expression[s->top-1] );
 }
 void pop (Stack* s)
 {
 s->top = s->top - 1;
 }
int checkBalanced( char expression[] )
 {
 Stack *s;
 int i;
 char paranthesis;
 for( i=0; i<strlen(expression); i++){
 
 paranthesis=expression[i];
 if(paranthesis==\'{\'||paranthesis==\'<\'||paranthesis==\'[\'||paranthesis==\'(\')
  push (s,paranthesis);
 
 else if(paranthesis==\'}\'||paranthesis==\'>\'||paranthesis==\']\'||paranthesis==\')\')
  {
 
 if(isEmpty (s)){
 return FALSE;
 }
 else{
 pop (s);
 }
 }
 }
   
 return isEmpty (s) ? TRUE:FALSE;
 }
 int main(int argc,char *argv[]){
 Stack *s;
 init (s);
 char expression[300];
 fgets(expression, MAX, stdin);
   
 checkBalanced(expression);
 
   
   
 return 0;
   
 }



