【问题标题】:Debugging push function from stack class I wrote in c++ [closed]从我用 C++ 编写的堆栈类调试推送功能 [关闭]
【发布时间】:2015-11-25 19:39:44
【问题描述】:

这个程序已经调试过了,这里没有编辑

但每当我尝试将元素压入堆栈时,它就会崩溃。我可能做错了什么?函数原型和其他代码似乎没问题。

Push() 中的问题已经解决了,不过这里不做编辑了(喜欢调试的朋友)也可以看看 Display() 函数。


这是整个程序:

#include<conio.h>
#include<iostream>
#include<stdlib.h>
#include<stdbool.h>
using namespace std;


class Stack {
    static const int Default_size = 100;
private:
    int a[100];
    int ele;
    int max_size;
    int top;

public:

    Stack(int k){
        int top = -1;
        int max_size = k;
    }

~Stack(){ delete [] a; }

public:
void Push(const int ele1);
void Pop();
bool Is_Full();
bool Is_empty();
void Display();
};

void Stack:: Push ( const int ele1) {
    if(Is_Full())  
        cout<<"StackOverflow";
    else 
        a[++top] = ele1;
}






void Stack::Pop () {
    if(Is_empty()) 
    cout<<"Stack empty";
else    
    top--;
}

bool Stack:: Is_Full() {
    if(top == max_size)
    return true;
    else
    return false;
}

bool Stack:: Is_empty() {
    if( top == -1)
    return true;
    else
    return false;
}

void Stack :: Display () {
     for(int i = 0 ; i< top; i++)
     cout<<a[i];
}


int main() {
Stack s(5);
cout<<"1 to push, 2 to pop, 3 to display, 4 to exit";
int ch;
cin>>ch;
 while(ch != 4) {
    if( ch == 1) {
     cout<<"Enter element";
     int ele; cin>>ele;
     s.Push(ele);
    }
    else if( ch ==2) {
    s.Pop();
    }
    else if(ch == 3) {
    s.Display();
    }
    else 
    exit(0);
    cout<<"Enter ch";
    cin>>ch;
}

return 0;
}       

【问题讨论】:

  • “它崩溃了”甚至不够描述性。
  • @ikegami 仍然不起作用。我会发布整个程序。
  • 我们不想要你的整个程序。请发布该程序的最小可运行演示。
  • 您也未能提供证明问题所需的必要输入。

标签: c++ class stack


【解决方案1】:

你不能在你的析构函数中调用delete [] a,因为你没有通过使用new得到a

事实上,您根本不需要显式析构函数。删除它会使代码更短更好,这总是一种很好的感觉。

编辑:您的构造函数也声明了两个局部变量,而不是初始化您的成员变量。因此,当您调用 Push 时,top 未初始化,这解释了崩溃。

会更好

Stack(int k) : top(-1), max_size(k) { }

【讨论】:

  • 我注意到 charmain 中的不可打印字符进行了比较。
  • @LogicStuff ch 是一个 int(名称选择不当)。
  • 我当然爱上了它。
  • @LogicStuff 至少你注意到了,直到你提到它我才注意到。
  • @AlanStokes 谢谢,我删除了析构函数,并修复了构造函数。能不能看看 display() 函数,好像也有问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-06-12
  • 2014-12-19
  • 1970-01-01
  • 2013-05-26
  • 1970-01-01
  • 2013-03-07
  • 1970-01-01
相关资源
最近更新 更多