Proszę o pomoc w znalezieniu błędów
#include <stdio.h>
#include <stdlib.h>
#include "fun_stack.h"
#include <string.h>
static strucstack stack = NULL;
static char tmpchar[BUF];
int top_of_funstack( void )
{
strucstack tmp = stack;
if (stack == NULL)
{
fprintf(stderr, "Stos jest pusty");
exit(EXIT_FAILURE);
}
while (tmp->next != NULL )
tmp = tmp->next;
return tmp->levelint;
} /* zwraca par_level - "zagłębienie nawiasowe" przechowywane na szczycie */
void put_on_fun_stack( int par_level, char *funame )
{
if (stack == NULL) {
strucstack nw = malloc( sizeof *nw );
nw->levelint = par_level;
nw->funnamechar = malloc((strlen(funame)+1) * sizeof * (nw->funnamechar));
if(nw->funnamechar == NULL) {
printf("Za mało pamięci");
exit(EXIT_FAILURE);
}
strcpy(nw->funnamechar, funame);
nw->next = NULL;
stack = nw;
}
else
{
strucstack tmp =stack;
while (tmp->next != NULL )
tmp = tmp->next;
tmp->next = malloc (sizeof * (tmp->next));
if(tmp->next == NULL) {
printf("Za mało pamięci");
exit(EXIT_FAILURE);
}
tmp->next->levelint = par_level;
tmp->next->funnamechar = malloc( (strlen(funame) + 1 ) * sizeof * (tmp->next->funnamechar));
if(tmp->next->funnamechar == NULL) {
printf("Za mało pamięci");
exit(EXIT_FAILURE);
}
strcpy(tmp->next->funnamechar, funame);
tmp->next->next= NULL;
}
}
/* odkłada na stos parę (funame,par_level) */
char *get_from_fun_stack( void )
{
strucstack tmp = stack;
if (stack == NULL)
{
fprintf(stderr, "Stos jest pusty");
exit(EXIT_FAILURE);
}
while (tmp->next != NULL )
tmp = tmp->next;
free(tmp->next);
strcpy(tmpchar, tmp->funnamechar);
free(tmp->funnamechar);
tmp = NULL;
return tmpchar;
} /* usuwa z wierzchołka parę (funame,par_level), zwraca zdjętą funame
*/
int main()
{
int a;
int numer;
int test=1;
char napis[200];
while (test){
scanf( "%d", &numer);
switch (numer){
case 1:
scanf( "%d %s", &a, napis);
put_on_fun_stack(a,napis);
break;
case 2: printf("%d \n",top_of_funstack());
break;
case 3: printf("%s \n",get_from_fun_stack());
break;
default: test = 0;
break;
}
}
return 0;
}
#ifndef _FUN_STACK_H_IS_INCLUDED_
#define _FUN_STACK_H_IS_INCLUDED_
#define BUF 1000 /* Maksymalna wartość kopiowanego stringa */
typedef struct e {
int levelint;
char *funnamechar;
struct e *next;
} * strucstack;
int top_of_funstack( void ); /* zwraca par_level - "zagłębienie nawiasowe" przechowywane na szczycie */
void put_on_fun_stack( int par_level, char *funame ); /* odkłada na stos parę (funame,par_level)*/
char *get_from_fun_stack( void ); /* usuwa z wierzchołka parę (funame,par_level), zwraca zdjętą funame*/
#endif