滚去学习 2023-03-10 17:53 采纳率: 100%
浏览 21
已结题

C语言数据结构顺序栈中出现的报错,如何解决?

求教大佬们,学习C语言数据结构参考伪代码写出如下代码,但是每次运行后都会报错“0x00007FF6929B1AD1 处(位于 栈(顺序表).exe 中)引发的异常: 0xC0000005: 写入位置 0xFFFFFFFFF61E9C90 时发生访问冲突。”不知道是什么原因。


#define _CRT_SECURE_NO_WARNINGS 1
#ifndef __DEFINE_H
#define __DEFINE_H
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
typedef int Status;
#endif

#include<stdio.h>
#define MAXSTACK 100
typedef char StackElemType; //栈数据类型
typedef struct __SqStack //顺序栈,最常用
{
    StackElemType* base;
    StackElemType* top;
    int stacksize;
} SqStack;


Status InitStack(SqStack* S) {
    S->base = (StackElemType*)malloc(sizeof(StackElemType) * MAXSTACK);
    if (!S->base)
        exit(OVERFLOW);
    S->top = S->base; //栈顶和指向栈底
    S->stacksize = MAXSTACK; //栈的容量
    return OK;
}

Status Push(SqStack* S, StackElemType e) {
    if (S->top - S->base == S->stacksize)
        return ERROR; //表示此时栈满
    *(S->top++) = e; // top指向内存单元存放e,且top指向下一个内存单元
    return OK;
}

Status Pop(SqStack* S, StackElemType* e) {
    if (S->base == S->top)
        return ERROR; //栈空
    *e = *(--(S->top));
    return OK;
}



Status IsEmpty(SqStack* S) {
    if (S->base == S->top)
        return TRUE;
    else
        return FALSE;
}
Status IsFull(SqStack* S) {
    if (S->top - S->base == S->stacksize)
        return TRUE;
    else
        return ERROR;
}
StackElemType GetTop(SqStack* S) {
    if (!IsEmpty(S))
        return *(S->top - 1);
}
int main(void)
{
    SqStack S;
    InitStack(&S);
    Push(&S, 'A');
    Push(&S, 'B');
    Push(&S, 'C');
    Push(&S, 'C');
    while (!IsEmpty(&S))
    {
        StackElemType e;
        Pop(&S, &e);
        printf("%c ", e);
    }
    system("pause");

    return 0;
}
  • 写回答

3条回答 默认 最新

  • 社区专家-Monster-XH 2023-03-10 18:05
    关注

    基于Monster 组和GPT的调写:
    出现在 IsFull 函数中的返回值。如果栈满,应该返回 TRUE,而不是 ERROR。因此,将 ERROR 修改为 TRUE 就可以解决这个问题。

    以下是已经更正的 IsFull 函数:

    Status IsFull(SqStack* S) {
        if (S->top - S->base == S->stacksize)
            return TRUE;
        else
            return FALSE;
    }
    
    
    

    头文件:

    #include<stdio.h>
    #include<stdlib.h>
    
    
    

    运行:

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 3月18日
  • 已采纳回答 3月10日
  • 创建了问题 3月10日

悬赏问题

  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥15 键盘指令混乱情况下的启动盘系统重装
  • ¥40 复杂的限制性的商函数处理