Stack implementation. (C) - Programmers Heaven

Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Categories

Stack implementation. (C)

autoriusautorius Posts: 2Member
I have a problem with POP.

My struct is:
[code]
struct node
{
char *string;
struct node *Kitas;
};
[/code]

and POP function, which makes program to crash.
[code]
char* POP(struct node** Top)
{
struct node* Temp;
char* string = calloc (255, sizeof(char));
if(Top != NULL)
{
Temp = (*Top);
string = (*Top) -> string;
(*Top) = (*Top) -> Kitas;
free(Temp);
return string;
}
else
{
free(string);
return NULL;
}

}
[/code]

Comments

  • nitays974nitays974 Posts: 4Member
    See my comments below in your code in [green]green[/green]

    : I have a problem with POP.
    :
    : My struct is:
    : [code]:
    : struct node
    : {
    : char *string;
    : struct node *Kitas;
    : };
    : [/code]:
    :
    : and POP function, which makes program to crash.
    : [code]:
    : char* POP(struct node** Top)
    : {
    : struct node* Temp;
    : char* string = calloc (255, sizeof(char));
    : if(Top != NULL)
    : {
    : Temp = (*Top);
    : string = (*Top) -> string; [green]
    /* You already allocated memory for the string pointer. so you
    can't just change it's lvalue. Instead, try strcpy from
    top.string to your string pointer */ [/green]
    : (*Top) = (*Top) -> Kitas;
    : free(Temp); [green]
    /* What are you trying to "free" here. Temp is just a pointer to your sturct.
    Instead, maybe you should free Top->string before the previous line where
    you overide Top. But to be sure, i need to see your "PUSH" function, and how
    you allocate memory for new record in the stack */ [/green]
    : return string;
    : }
    : else
    : {
    : free(string);
    : return NULL;
    : }
    :
    : }
    : [/code]:
    :

Sign In or Register to comment.