У меня есть два класса C ++, давайте назовем один hier
а другой cp
, Во время запуска hier
создает экземпляр cp
, cp
читает в текстовом файле с двумя столбцами, которые называются resp_r
а также resp_l
и сохраняет содержимое в двух массивах с одинаковыми именами. Например: std::vector<int> resp_r;
Для любопытных читателей эти столбцы показывают, произошло ли нажатие левой или правой клавиши в течение 1 секунды.
В каждой клетке resp_r/l
затем либо имеет 1 или 0, в зависимости от текстового файла.
hier
знает о количестве строк (t) в текстовом файле и имеет for
зацикливаться t
, В каждом цикле он «спрашивает» cp
в чем содержание resp_r/l[t]
вызывая публичный метод cp
: string get_response(int t)
:
string resp;
while (t < max_t) {
resp = cp->get_response(t);
...
}
в cp
, get_response
функция определяется так:
string CP::get_response(int t) {
if (resp_r[t] == 1) {
return "right";
} else if (resp_l[t] == 1) {
return "left";
}
return "none";
}
У меня есть около 50 файлов, для которых это работает нормально, но в одном из них это не так, когда сценарий приближается к концу файла.
* Ошибка в `./cp_diff_vr_x.out ‘: free (): неверный указатель: 0x0000000000f3e920 *
Я пытался выяснить, что здесь не так. Похоже, что ошибка возникает во время оператора return (если точнее, return «right»), а не во время запроса resp_r
,
Хорошо, хорошо, Сэм Варшавчик был прав, ошибка была в совершенно не связанном месте, когда доступ к массиву выполнялся в другой функции (внутри cp) за пределами установленного размера. Возмутительно!
Я обнаружил ошибку в valgrind, из-за которой я ошибся в размере чтения.
Вот это да. Прошло слишком много времени с тех пор, как я написал код на С ++. Время завершить этот проект и отправить его прочь!
Спасибо всем.
Других решений пока нет …