c++ - 向量操作中的双重释放或损坏(输出)错误(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()
您可以通过注释掉程序的某些部分来找到此错误。当它运行时没有错误时,这表明该错误位于您注释掉的部分(或由于您的注释而未运行的代码中)的某处。
推荐阅读
- javascript - 从功能声明的堆栈访问变量
- excel - 将数组中的每个条目分开并放入自己的单元格中
- c++ - 使用 mutable 允许修改 unordered_set 中的对象
- .net-core - Microsoft.NETCore.Runtime.CoreCLR 包未安装在 .NET 核心项目中是什么意思?
- linux-kernel - 从 pci_irq_vector(9) 函数向 irq 注册中断会导致“此函数没有 irq 处理程序”?
- javascript - jQuery fadeOut 和 fadeIn 函数搞砸了显示属性
- reactjs - 来自动作调用的 redux 道具未定义
- java - 使用首选项可配置 Vaadin 会话超时
- google-bigquery - 在大查询数据集中选择最新表 - 标准 SQL 语法
- slack - 该死 - 斜杠命令不起作用(错误消息:`404_client_error`)