当我尝试推送
时,有人能告诉我为什么会出错 #include <stdio.h>
typedef struct Element
{
struct Element *next;
void *data;
}Element;
bool createStack(Element **stack)
{
*stack = NULL;
return true;
}
bool push (Element **stack, void *data)
{
Element *new_element = new Element;
if(!new_element)
{
printf("Memory allocation error in push");
return false;
}
new_element->data = data;
new_element->next = *stack;
*stack = new_element;
return true;
}
bool pop (Element **stack, void *popped_data)
{
if(!*stack)
{
printf("Stack empty");
return false;
}
Element *new_head = new Element;
popped_data = (*stack)->data;
new_head = (*stack)->next;
delete *stack;
return true;
}
bool emptyStack(Element **stack)
{
if(!*stack)
{
printf("Stack empty");
return false;
}
Element *delete_ele;
while(*stack)
{
delete_ele=*stack;
*stack = delete_ele->next;
delete delete_ele;
}
return true;
}
int main()
{
int i,*j;
Element *stacka = new Element;
while(i!=5)
{
printf("Enter ur choice \n");
scanf("%d",&i);
if(i==1)
{
if(createStack(&stacka))
{
printf("yes");
}
}
if(i==2)
{
*j=2;
if(push(&stacka,j))
{
printf("yes");
}
}
if(i==3)
{
if(pop(&stacka,j))
{
printf("yes %d",*j);
}
}
if(i==4)
{
if(emptyStack(&stacka))
{
printf("yes");
}
}
}
return 0;
}
感谢您在ubuntu上运行它的帮助
答案 0 :(得分:5)
就在这一行
*j = 2;
j
此时尚未初始化。
您应该&k
推送k
int
,或初始化j = new int
。在后一种情况下,内存泄漏避免取决于您。
答案 1 :(得分:1)
当您声明int i,*j;
时,j
只是一个未初始化的指针,不指向有效的内存位置。稍后,当您说*j=2;
时,您取消引用该指针,这会导致未定义的行为。
您必须为j
指定一个有意义的位置,如下所示:
int j_content;
int *j = &j_content;