[英]segmentation fault
谁能告诉我为什么我尝试推送错误消息
#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上运行它的帮助
在这条线
*j = 2;
j
尚未初始化。
您应该在k
是int
情况下按&k
或初始化j = new int
。 在后一种情况下,避免内存泄漏取决于您。
当您声明int i,*j;
, j
只是一个未初始化的指针,它不指向有效的内存位置。 稍后,当您说*j=2;
,则取消引用该指针,这将导致未定义的行为。
您必须为j
分配一个有意义的位置,如下所示:
int j_content;
int *j = &j_content;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.