在循环中显示不同值的初始化数组

时间:2018-08-10 08:52:12

标签: c++ arrays loops recursion c++14

我初始化了一个数组,并尝试使用循环和递归显示元素,但是每次它显示的值都与原始值不同。 我尝试单独显示元素,并且效果很好。

这是定义数组的类定义:

class stack
{
    public:
        int top, *arr;
        stack(int s)
        {
            top=-1;
            size=s;
            arr=def_arr(s);
        }
        void push(int num)
        {
            if(top>=size-1)
            {
                cout<<"Stack has reached maximum length";
            }
            else
            {
                top++;
                arr[top]=num;
            }
        }
        int pop()
        {
            if(top>-1)
            {
                int temp;
                temp=arr[top];
                top--;
                return temp;
            } 
            else
            {
                cout<<"The stack has no values";
            }
        }
        void print()
        {
            if(top>-1)
            {
                for(int i=0; i<=top; i++)
                {
                    cout<<arr[i];
                    cout<<"\t";
                }
            }
            else
            {
                cout<<"Can\'t print stack of length 0";
            }
        }
    private:
        int size;
        int *def_arr(int size)
        {
            int arr[size];
            return arr;
        }
};

我运行的代码:

int main()
{
    stack A(3);
    A.push(5);
    A.push(8);
    A.push(10);
    cout<<A.arr[1]<<"\n";
    A.print();
}

结果:

8
5       87      -1259567440               

我想念什么?

1 个答案:

答案 0 :(得分:0)

 $(document).ready(function() {
     var o1 = $('#c1'), o2 = $('#c2');

     //Sync o2 by o1
     o1.on('click', '.owl-next', function () {
         o2.trigger('next.owl.carousel')
     });
     o1.on('click', '.owl-prev', function () {
         o2.trigger('prev.owl.carousel')
     });
     //Sync o1 by o2
     o2.on('click', '.owl-next', function () {
         o1.trigger('next.owl.carousel')
     });
     o2.on('click', '.owl-prev', function () {
         o1.trigger('prev.owl.carousel')
     });

     //Carousel settings
     o1.owlCarousel({
         center : true,
         loop : true,
         items : 1,
         margin:0,
         nav : true
     });
    o2.owlCarousel({
         center : true,
         loop : true,
         items : 1,
         margin:0,
         nav : true
     });
 });

是错误的,因为它返回了指向局部变量int *def_arr(int size) { int arr[size]; return arr; } 的指针。一旦函数退出,局部变量将不复存在,因此指针指向无效地址(又称悬挂指针)。使用该指针是不确定的行为。

可变长度数组(VLA)是C ++中的非标准构造。

两种可能的解决方案

1)使用std :: vector

arr

这将需要在代码的其他地方进行更改(主要是,类中的#include <vector> std::vector<int> def_arr(int size) { std::vector<int> arr(size); return arr; } 也必须重新声明为std :: vector)。

2)使用动态内存分配

arr

这将导致代码中的内存泄漏,解决这些问题并不容易,您应该阅读“三分法则”。

大多数人会推荐选项1。恭喜您即将学习C ++中最重要的主题,即资源管理。