在向量 C++ 中处理指针
Posted
技术标签:
【中文标题】在向量 C++ 中处理指针【英文标题】:Handling pointer in vector C++ 【发布时间】:2019-05-04 06:11:14 【问题描述】:在 C++ 中使用向量时遇到问题。 下面的代码有这个运行时错误:
* `./a.out' 中的错误:双重释放或损坏(输出):0x0000000001e5d050 * === 回溯:=== . . .
我已经写了这段代码。
int main()
vector<int> ve;
int n;
cin>>n;
for(int i=1; i<n+1; i++)ve.push_back(i);
int last, sec_last, ans;
while(!(ve.empty()))
ans = ve.back();
last = ve.back();
ve.pop_back();
sec_last = ve.back();
ve.pop_back();
ve.push_back(last + sec_last + last*sec_last);
cout<<"\nline 20\n";
cout<<ans<<"\n";
cout<<"\nline 22\n";
请解释一下这个错误是什么意思,我该如何纠正它......
【问题讨论】:
进入调试器并检查变量值。 【参考方案1】:“在空容器上回调/pop_back 未定义” -- 互联网
虽然循环条件只会阻止您一次,直到向量 ve
再次被 pop_back
修改。在这种情况下,向量可能为空,对空向量调用 back
可能会导致崩溃。
while(!(ve.empty()))
ans = ve.back();
last = ve.back();
ve.pop_back(); // <---- Vector could become empty
sec_last = ve.back(); // <---- If vector is indeed empty, then undefined behavior
ve.pop_back();
ve.push_back(last + sec_last + last*sec_last);
【讨论】:
以上是关于在向量 C++ 中处理指针的主要内容,如果未能解决你的问题,请参考以下文章