啊啵测的 2017-07-04 10:08 采纳率: 100%
浏览 779
已采纳

这两个代码都差不多,为什么第二份运行结果是错的

1、#include
using namespace std;
class mystack
{
private:
int* data;
int top;
public:
//初始化栈
mystack()
{
data = new int[100];
top = -1;
}

//压栈
void push(int value)
{
    top++;
    data[top] = value;
}
//出栈
int pop()
{
    int temp = data[top];
    top--;
    return temp;
}

//求当前栈长度
int Getlength()
{
    return top + 1;
}

~mystack()
{
    delete[] data;
}

};

void main()
{
int num, n;
mystack stack;
cout << "请输入要转化的十进制数:";
cin >> num;
cout << "请输入要转化为n进制数:";
cin >> n;
while (num)
{
stack.push(num%n);
num = num / n;
}
while (stack.Getlength()>0)
{
cout << stack.pop();
}
cout << endl;
}
图片说明
2、
#include
using namespace std;

class A
{
private:
int* a;
int top;
public:
A()
{
a = new int[100];
top = -1;
}

void push(int value)
{
    top++;
    a[top] = value;
}

int pop()
{
    int num;
    top--;
    num = a[top];
    return num;
}

int length()
{
    return top+1;
}

~A()
{
    delete[] a;
}

};

void main()
{
int number,n,value;
A x;
cout << "请输入要转化的十进制数:";
cin >> number;
cout << "请输入要转化为n进制数:";
cin >> n;
while(number)
{
value=number%n;
x.push(value);
number=number/n;
}
while(x.length()>0)
{
cout<<x.pop();
}
cout<<endl;

}
图片说明

  • 写回答

1条回答 默认 最新

  • threenewbee 2017-07-04 16:17
    关注

    int pop()
    {
    int temp = data[top];
    top--;
    return temp;
    }

    int pop()
    {
    int num;
    top--;
    num = a[top];
    return num;
    }
    不等价,后者先--,然后再返回,导致返回了a[0]前面没有初始化的内存去了,就有了-33686019

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 用土力学知识进行土坡稳定性分析与挡土墙设计
  • ¥15 帮我写一个c++工程
  • ¥30 Eclipse官网打不开,官网首页进不去,显示无法访问此页面,求解决方法
  • ¥15 关于smbclient 库的使用
  • ¥15 微信小程序协议怎么写
  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教