Двойное освобождение или повреждение (выход) с вектором push_back пары <int, int>? - PullRequest
0 голосов
/ 30 октября 2018

У меня есть следующие основные программы:

#include "asd.h"

int main() {
        asd a;
        a.input();
}

Ниже приведен файл asd, который является файлом класса:

#include "asd.h"

int maxlength = 256;
vector<pair<int, int>> t;

void asd::input() {
    for (int x = 0; x < 400; x++) {
        tAdd(x);
    }

}

void asd::tAdd(int x) {
    if (t.size() == maxlength) {
        vector<pair<int, int>>::iterator it = t.begin();
        t.erase(it);
        t.resize(maxlength);
    }
    //The function below gives me the error
    t.push_back(make_pair(x, 0));
    //
}

Что здесь происходит? Я не оперирую какими-либо указателями. У меня в основном есть класс asd, который содержит вектор пары целых в качестве члена данных. Из моей основной программы я создаю объект класса asd и вызываю функцию ввода. Функция ввода просто повторяется до 400 и вызывает функцию tAdd. Эта функция в основном стирает первый элемент вектора и изменяет его размер, если он достигает максимального размера. Затем есть утверждение, которое отталкивает пару целых. Вот в чем проблема, на самом деле она никогда не доходит до того, что должна изменить размер вектора. Он всегда дает сбой на 8-й итерации, и я знаю, что это вызывает функция возврата назад. Кроме того, ошибка такова:

двойное освобождение или коррупция (нет)
Прервано (ядро сброшено)

...