У меня есть следующие основные программы:
#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-й итерации, и я знаю, что это вызывает функция возврата назад. Кроме того, ошибка такова:
двойное освобождение или коррупция (нет)
Прервано (ядро сброшено)