为什么此代码在“ Visual Studio 2017”中有效,但在“ Visual Studio 6.0”中不起作用

时间:2019-05-13 01:26:45

标签: c++

此代码在 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 ;
    }

如果还有另一种简单的方法,请告诉我。

1 个答案:

答案 0 :(得分:5)

在使用ix之前,请勿对其进行初始化。因此,您有未定义的行为。

这些变量甚至都不应该属于stack类的一部分。它们应该只是用于保留临时状态的本地值。

您在这里也有未定义的行为:

count = 0;
list1 = new int[count];
list2 = new int[count];

您不应分配零个条目的数组。而且,您永远都不应在分配的内存之外访问这些数组。

此代码还有很多其他问题,但是解决这些问题可能会有所帮助。