Как проверить для std :: vector вне зоны доступа

[Нашел здесь дубликат: C ++ — обнаружение доступа вне диапазона ]

Если у меня есть программа с «векторным доступом вне диапазона», вот так:

  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 нет утверждений, я не могу не задаться вопросом, почему они не делают такую ​​простую проверку.

4

Решение

использование at() функция-член:

std::vector<int> A(2);

A.at(10) = 3;  //will throw std::out_of_range exception!

Так как это может вызвать исключение, вы бы хотели его поймать. Так что используйте try{} catch{} блок!

Надеюсь, это поможет.

13

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

У меня есть способ найти эту ошибку наверняка? Я имею в виду что-то вроде компиляции в режиме отладки и посмотреть, останавливает ли выполнение какое-либо утверждение.

Valgrind легко ловит эти ошибки. Просто беги:

valgrind ./YOUR_EXECUTABLE

Я не могу перестать удивляться, почему они не делают такую ​​простую проверку.

Видеть это ответ.

1

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