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

Welcome to the new platform of Programmer's Heaven! We apologize for the inconvenience caused, if you visited us from a broken link of the previous version. The main reason to move to a new platform is to provide more effective and collaborative experience to you all. Please feel free to experience the new platform and use its exciting features. Contact us for any issue that you need to get clarified. We are more than happy to help you.

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.