在向量 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++ 中处理指针的主要内容,如果未能解决你的问题,请参考以下文章

指向另一个类 c++ 中对象向量的指针

在 C++ 中,如何获取指向向量的指针?

在 C++ 向量中存储指针时出错

对象指针向量在 C++ 中似乎没有按预期执行

在 C++ 中获取指向复数向量的实部和虚部的指针

C++:指向向量(及其元素)的指针是不是稳定,因为随着向量的增长,向量将在内存中迁移以适应更多元素? [复制]