向量(c++)操作中的双自由或损坏(out)错误
double free or corruption (out) error in operations with vectors (c++)
当我运行以下代码时double free or corruption (out) Aborted (core dumped)
错误。我试过调试,但我仍然不明白为什么这个代码不起作用。我试着搜索类似的错误,但大多数错误都涉及原始指针和错误的内存分配,但事实并非如此。
#include <vector>
#include <algorithm>
#include <cmath>
float median(std::vector<float> array){
std::sort(array.begin(), array.end());
std::size_t length = array.size();
if (length % 2 != 0){
return array[(length - 1)/2];
}
float median = (array[length/2 - 1] + array[length/2]) / 2.0;
return median;
}
int main(int argc, char const *argv[])
{
const int DIM = 32;
const int AUX_COLS = 4;
std::vector<float> weights(DIM * AUX_COLS);
for (std::size_t j = 0; j < AUX_COLS; j++) {
std::vector<float> column(DIM);
for (std::size_t i = 0; i < DIM; i++) {
column[i] = i * i + j * j;
}
float colMedian = median(column);
for (std::size_t i = 0; i < DIM; i++) {
weights[i * DIM + j] = std::abs(1.0f);
}
}
return 0;
}
weights[i * DIM + j] = std::abs(1.0f);
这是错误的,因为
DIM*(DIM-1)+(AUX_COLS-1) > DIM * AUX_COLS == weights.size()
您可以通过注释掉程序的某些部分来发现这些错误。当它运行时没有错误,这表明bug在您注释掉的部分中(或因为注释而没有运行的代码中(。
相关文章:
- 为什么会发生堆损坏
- 具有奇怪重复模板模式的派生类中的成员变量已损坏
- 平均图像时图像损坏
- 如何针对特定情况调试和修复此双自由内存损坏问题
- 为什么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"中的错误:双重释放或损坏(快速顶部):)