неверный указатель при передаче строки в переполнении стека

У меня есть два класса 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,

-3

Решение

Хорошо, хорошо, Сэм Варшавчик был прав, ошибка была в совершенно не связанном месте, когда доступ к массиву выполнялся в другой функции (внутри cp) за пределами установленного размера. Возмутительно!

Я обнаружил ошибку в valgrind, из-за которой я ошибся в размере чтения.

Вот это да. Прошло слишком много времени с тех пор, как я написал код на С ++. Время завершить этот проект и отправить его прочь!

Спасибо всем.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]