C STL优先级队列获得BAD_ALLOC

C++ STL priority queue getting bad_alloc

本文关键字:BAD ALLOC STL 优先级 队列      更新时间:2023-10-16

我正在尝试使用stl优先级队列,定义为:

template <typename T>
using min_queue = std::priority_queue<T, std::vector<T>, std::greater<T>>;

运行以下代码时:

Label kNN(int k, const Matrix &trainingSet, const std::vector<Label> &trainingLabels, Matrix &evSet, int i1, const DistanceF &f) {
    Timer timer("kNN Timer");
    min_queue<std::pair<double, Label>> distances;
    for (int i = 0; i < trainingSet.rows(); ++i) {
        distances.push(std::pair<double, Label>(f(trainingSet, i, evSet, i1), trainingLabels[i]));
    }
    int i = 0;
    int labels[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
    while (!distances.empty() && i < k) {
        labels[(int)distances.top().second]++;
        distances.pop();
        ++i;
    }
    int maximum = 0;
    for (int j = 0; j < 10; ++j) {
        if (labels[j] > maximum) {
            maximum = j;
        }
    }
    return (double)maximum;
}

我有以下错误:

malloc:***对象的错误0x230000000:未分配释放指针

问题最终处于代码的不同部分:复制矩阵时,要复制的行数中存在错误,这导致了源矩阵的最后一行不要复制到目标矩阵。因此,向量无法正常初始化,并导致了不良的异差错误。