Wpis z mikrobloga

@jedrek018: valgrind jest rewelacyjnym narzędziem jeżeli chodzi o wykrywanie takich błędów, potrafi nawet wskazać free w której w funkcji tak psuje + teraz nie ściągniesz, ale na przyszłość polecam visual studio, ale jeszcze przez chwilę popatrzę
@jedrek018: Ładne UB, pierw kopiujesz string, potem patrzysz czy przypadkiem wskaźnik nie jest

NULL
:

char * wartosc = (char*)malloc(strlen(gora->str) + 1);
if (stos_pusty()) return NULL;
@jedrek018: przekombinowałeś robiąc sobie typedefa na wskaźnik i potem alokując przez to pamięć - dzięki temu zawsze miałeś szalone 4 bajty wskaźnika jako pamęć dla całej struktury i zabawa zaczynała się wtedy, gdy odwołujesz się do wskaźnika dol, pisząc po stosie
@jedrek018: to co @ntskj napisał,

sizeof(stos)
nie jest równe

sizeof(*stos)
, którego powinieneś uƶyć.

Ponadto, nie łatwiej by tak? (i bez wycieku pamięci)

char * zrzuc()
{
if (stos_pusty()) return NULL;
stos przejsciowy = gora;
gora = gora->dol;
char * wartosc = gora->str;
free(przejsciowy);
return wartosc;
}