此代码在 Visual Studio 2017 中工作100%,但我不知道为什么 在 VS 6.0
中不起作用The Result in Visual Studio 6.0
The Result in Visual Studio 2017
#include<iostream>
#include<assert.h>
using namespace std;
class stack
{
struct Node
{
int info;
Node *link;
};
Node *Top;
int count;
int *list1, *list2;
int i, x;
public:
stack()
{
Top = NULL;
count = 0;
list1 = new int[count];
list2 = new int[count];
}
bool isEmpty() { return Top == NULL; }
int TopStack()
{
assert(Top != NULL);
return Top->info;
}
void Push(int num)
{
Node *newNode = new Node;
newNode->info = num;
newNode->link = Top;
Top = newNode;
count++;
}
void Pop()
{
Node *temp;
if (!isEmpty())
{
temp = Top;
Top = Top->link;
delete temp;
count--;
}
else
cout << "the Stack is Empty." << endl;
}
void Input()
{
int num, Stop;
cout << "Enter the stop Value : ";
cin >> Stop;
cout << "Enter the number : ";
cin >> num;
while (num != Stop)
{
Push(num);
cin >> num;
}
}
void print()
{
stack temp;
cout << "\n The Number is : ";
while (!isEmpty())
{
temp.Push(TopStack());
Pop();
}
while (!temp.isEmpty())
{
cout << temp.TopStack() << " ";
Push(temp.TopStack());
temp.Pop();
}
}
void Palindrom()
{
stack temp1;
bool found = false;
while (!isEmpty())
{
list1[i] = TopStack();
temp1.Push(list1[i]);
Pop();
i++;
}
while (!temp1.isEmpty())
{
list2[x] = temp1.TopStack();
Push(temp1.TopStack());
temp1.Pop();
x++;
}
cout << "\n\nThe list 1 : ";
for (int t = 0; t < count; t++)
cout << list1[t] << " ";
cout << "\nThe list 2 : ";
for (int r = 0; r < count; r++)
cout << list2[r] << " ";
for (int e = 0; e < count; e++)
{
if (list1[e] != list2[e])
{
found = true;
break;
}
}
cout << endl << endl;
if (found)
{
cout << " -Not Palindrom" << endl;
}
else
cout << " -Palindrom " << endl;
}
};
int main()
{
stack obj;
obj.Input();
obj.print();
obj.Palindrom();
return 0 ;
}
如果还有另一种简单的方法,请告诉我。
答案 0 :(得分:5)
在使用i
或x
之前,请勿对其进行初始化。因此,您有未定义的行为。
这些变量甚至都不应该属于stack
类的一部分。它们应该只是用于保留临时状态的本地值。
您在这里也有未定义的行为:
count = 0;
list1 = new int[count];
list2 = new int[count];
您不应分配零个条目的数组。而且,您永远都不应在分配的内存之外访问这些数组。
此代码还有很多其他问题,但是解决这些问题可能会有所帮助。