C++:双倍免费或损坏(out)
C++ : Double free or corruption (out)
我收到这个错误
*** Error in `./main': double free or corruption (out): 0x000000000095c8a0 ***
getPieces()
定义为vector<Piece*> Position::getPieces()
getSymbol()
返回一个int
我想要实现的是从向量中移除与变量Pointer* piece
相同的Piece
指针。
int Position::removePiece(Piece* piece) {
for (size_t i = 0; i < getPieces().size(); i++) {
if (getPieces()[i] == piece) {
getPieces().erase(getPieces().begin() + i); // errors happens here
std::cout << getPieces().size() << std::endl;
return getSymbol();
}
}
return -1;
}
写入时,getPieces()
返回向量的副本。每次调用getPieces()
时,都是不同的副本。您试图使用迭代器从一个向量中移除元素,这就难怪会出现问题。无论如何,您尝试修改一个副本,该副本将在您离开函数时(甚至更早)被销毁。
如果getPieces
是Position
返回内部字段副本(例如m_vector
)的方法,则在removePiece()
中使用m_vector
,而不是getPieces
调用。
相关文章:
- 为什么会发生堆损坏
- 具有奇怪重复模板模式的派生类中的成员变量已损坏
- 平均图像时图像损坏
- 如何针对特定情况调试和修复此双自由内存损坏问题
- 为什么C中的通用链表中存储的数据已损坏
- IN, OUT, INOUT Parameters
- gdb错误:Backtrace已停止:上一帧与此帧相同(堆栈已损坏?)
- 即使使用调试编译标志,表达式也是"optimized out"
- C++双重释放或损坏(out)
- 捕获标准输出以压缩并使用 CTRL-C 中断会给出损坏的 zip 文件
- 使用全局声明的向量时,C++双重释放错误/损坏
- 赋值运算符上的双重释放或损坏(out)
- IPIV magma_getrs_gpu上的双免费或损坏(OUT)
- Sqlite3和pthread,双自由或损坏(out)
- 字符指针指向字符串,然后指向字符串数组。"./a.out"中的错误:malloc():内存损坏:0x0900c3b0***
- c++双重释放或损坏(out)错误
- C++:双倍免费或损坏(out)
- c++双精度释放或损坏(out):即使使用复制构造函数和赋值操作符
- "./a.out"中的错误:双重释放或损坏(!prev):0x096fb008***中止(核心转储)
- 析构函数给出我不明白的输出("./a.out"中的错误:双重释放或损坏(快速顶部):)