我初始化了一个数组,并尝试使用循环和递归显示元素,但是每次它显示的值都与原始值不同。 我尝试单独显示元素,并且效果很好。
这是定义数组的类定义:
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
我想念什么?
答案 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 ++中最重要的主题,即资源管理。