提问人:Yash Sachdeva 提问时间:10/16/2023 最后编辑:mchYash Sachdeva 更新时间:10/16/2023 访问量:48
使用另一个堆栈反转堆栈,运行时错误
Reverse a stack using another stack, runtime error
问:
#include <stdio.h>
#include <stdlib.h>
typedef struct stack
{
int top;
int size;
int *arr;
} fk;
fk *stackcreater()
{
fk *new = (fk *)malloc(sizeof(fk));
new->size = 20;
new->arr = (int *)malloc(new->size * sizeof(int));
new->top = -1;
return new;
}
int isfull(fk *s)
{
return (s->top == s->size - 1);
}
int isempty(fk *s)
{
return (s->top == -1);
}
void push(fk *s, int data)
{
if (isfull(s))
{
printf("stack overflow");
}
else
{
s->top++;
s->arr[s->top] = data;
}
}
int pop(fk *s)
{
if (isempty(s))
{
printf("stack underflow");
}
else
{
int val = s->arr[s->top];
s->top--;
return val;
}
}
void display(fk *s)
{
for (int i = 0; i <= s->top; i++)
{
printf("%d ", s->arr[i]);
}
}
int main()
{
fk *s = stackcreater();
fk *reverse = stackcreater();
int n, val;
do
{
printf("how many elements you want to insert: \t");
scanf("%d", &n);
} while (n > s->size);
for (int i = 0; i < n; i++)
{
push(s, i);
}
display(s);
printf("\n");
while (!isempty(s))
{
val = pop(s);
push(reverse, val);
}
display(reverse);
free(s);
free(reverse);
free(s->arr);
free(reverse->arr);
return 0;
}
我为新手反转堆栈而编写的这段代码,我认为这在某种程度上是有效的,因为当我在 VS Code 中运行它时,它需要一分钟才能加载,然后要求 n,而不是它应该在运行后立即要求它,我认为 VS 代码可能有问题,但没有, 我当时使用的在线编译器,它显示运行时错误,分段错误
答: 暂无答案
上一个:子类型比较器单衬垫问题
评论
free(s->arr);
释放内存后,不允许访问指向的内存。将该行移到 .相同。此错误的结果是未定义的行为,这可能会导致您观察到的分段错误。s
free(s);
reverse
pop
free