qq_67362360 2022-08-12 12:16 采纳率: 50%
浏览 47
已结题

运行不了,调试后出现段错误

LiStack.h
#include <stdio.h>
#include <malloc.h>
#include <iostream>
#define ElemType char

using namespace std;

typedef struct LinkNode
{
    ElemType data;
    struct LinkNode *next;
}LiStack;

//初始化
void InitStack(LiStack *s){
    s=(LiStack*)malloc(sizeof(LiStack));
    s->next=NULL;
} 

//销毁
void DestroyStack(LiStack *s){
    LiStack *p=s,*q=s->next;
    while(q!=NULL){
        free(p);
        p=q;
        q=p->next;
    } 
    free(p);
} 

//判空
bool EmptyStack(LiStack *s){
    return (s->next==NULL);
} 

//进栈
void Push(LiStack *s,ElemType e){
    LiStack *p;
    p=(LiStack*)malloc(sizeof(LiStack));
    p->data=e;
    p->next=s->next;
    s->next=p;
} 

//出栈
bool Pop(LiStack *s){
    LiStack *p;
    ElemType e;
    if(s->next==NULL){
        return false;
    }
    p=s->next;
    e=p->data;
    s->next=p->next;
    free(p);
    return true;
} 

//取栈顶元素
bool GetPop(LiStack *s){
    ElemType e;
    if(s->next==NULL){
        return false;
    }
    e=s->next->data;
    cout<<"栈顶元素为:";
    cout<<e;
    return true;
} 

//输出
bool out(LiStack *s){
    ElemType e;
    if(s->next==NULL){
        return false;
    }
    LiStack *p=s->next;
    
    while(p!=NULL){
        
        cout<<p->data;
        p=p->next;
    }
    cout<<endl;
    return true;
} 




#include <iostream>
#include "LiStack.h"

using namespace std;

int main() {
    LiStack s;
    int n,i,a;
    ElemType e;
    InitStack(&s);
    
    cout<<"请输入需要建立多少个元素的栈:"<<endl;
    cin>>n;
    for(i=0;i<n;i++){
        cout<<"请输入建立栈的元素:"<<endl;
        cin>>e; 
        Push(&s,e);
    }
    out(&s);
    
    GetPop(&s);
    
    
    cout<<"是否需要出栈:1.是   2.否"<<endl;
    cin>>a;
    if(a=1){
        Pop(&s);
        out(&s);
        GetPop(&s);
    }
    
    DestroyStack(&s);
    
    return 0;
}
  • 写回答

2条回答 默认 最新

  • 关注

    InitStack这个函数初始化的时候,有问题。
    主程序中,LiStack s已经申请了空间,但是在InitStack函数中又重新分配了空间,这么弄是不对的。
    修改如下:

    //初始化
    void InitStack(LiStack* s) {
        //s = (LiStack*)malloc(sizeof(LiStack));  //这一句注释掉
        s->next = NULL;
    }
    
    

    主函数中,还有一个错误,if(a=1)这里,应该是 if(a==1)
    =是赋值运算符,==是逻辑运算符,你少写了一个=

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

报告相同问题?

问题事件

  • 系统已结题 8月20日
  • 已采纳回答 8月12日
  • 创建了问题 8月12日

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog