Если у меня есть программа с «векторным доступом вне диапазона», вот так:
std::vector<int> A(2);
...
A[10] = 3;
У меня есть способ найти эту ошибку наверняка?
Я имею в виду что-то вроде компиляции в режиме отладки и посмотреть, останавливает ли выполнение какое-либо утверждение.
До сих пор я проверял это самостоятельно. Но может быть, мне не нужно писать дополнительный код?
Постскриптум Я проверил утверждение конечно. Это не называется.
С помощью этой программы:
#include <vector>
int main() {
std::vector<int> A(2);
A[10] = 3;
return 0;
}
составленный
g++ 1.cpp -O0; ./a.out
Похоже, что в коде std нет утверждений, я не могу не задаться вопросом, почему они не делают такую простую проверку.
использование at()
функция-член:
std::vector<int> A(2);
A.at(10) = 3; //will throw std::out_of_range exception!
Так как это может вызвать исключение, вы бы хотели его поймать. Так что используйте try{} catch{}
блок!
Надеюсь, это поможет.
У меня есть способ найти эту ошибку наверняка? Я имею в виду что-то вроде компиляции в режиме отладки и посмотреть, останавливает ли выполнение какое-либо утверждение.
Valgrind легко ловит эти ошибки. Просто беги:
valgrind ./YOUR_EXECUTABLE
Я не могу перестать удивляться, почему они не делают такую простую проверку.
Видеть это ответ.