gpt4 book ai didi

c - 入栈操作逻辑错误

转载 作者:太空宇宙 更新时间:2023-11-04 02:43:59 25 4
gpt4 key购买 nike

我正在将堆栈作为数组进行插入操作,但我的程序在输入第一个值时崩溃。

typedef struct Stack
{
int top;
int elements[20];
}
stack;
stack *s;

void push(int x)
{
s->top++;
if(s->top<=19){
s->elements[s->top]=x;}
else
puts("Overflow");
}

最佳答案

根据您目前的代码,您似乎正在使用未初始化的 s。使用初始化内存调用 undefined behaviour这反过来可能导致段错误。

为了防止单元化的s,你可能想像这样修改你的代码

void push(int x)
{
if (s) //check if `s` has been initialized.
{
s->top++;
if(s->top<=19)
{
s->elements[s->top]=x;
}
else
puts("Overflow");
}
else
//abort, return error or something similar
}

注意:

除了这里手头的问题,还有一个隐藏的问题,一旦你解决这个问题就会出现。

在您的 push() 函数中,您正在递增 top无条件。这意味着,即使堆栈已满,您的 top 值也会增加,稍后会导致计算错误。

您必须将堆栈 top 增量部分也移动到值范围检查下。

关于c - 入栈操作逻辑错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29210748/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com