【发布时间】:2018-08-10 08:52:11
【问题描述】:
我初始化了一个数组并尝试使用循环和递归来显示元素,但每次它显示的值都与原始值不同。 我尝试单独显示元素,效果很好。
这是定义数组的类定义:
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
我错过了什么?
【问题讨论】:
-
def_arr返回一个悬空指针。int arr[size]也是非标准 C++ -
@UnholySheep 你说的非标准是什么意思?
-
可变长度数组不是 C++ 标准的一部分。一些编译器支持它们作为扩展,但这不是它们所必需的。标准方式是使用
std::vector -
这就是undefined这个词的美妙之处,它通常会工作一段时间,然后当其他东西试图使用相同的内存时就会停止。
标签: c++ arrays loops recursion c++14