2013-11-07 3 views
1

Я пытаюсь получить доступ к переменной и распечатать ее. Однако я столкнулся с ошибкой Vector subscript out of range.Выражение: векторный индекс вне диапазона C++?

Я делаю

cout << myStruct->myVector[0].GetCoordinate(0) << endl; 

где myStruct указывает на структуру, которая содержит вектор myVector точек. Поэтому я пытаюсь распечатать свою первую координату.


Для отладки:

cout << typeid(myStruct->myVector[0].GetCoordinate(0)).name() << endl; 

дает мне

float 

и

cout << sizeof(myStruct->myVector[0].GetCoordinate(0)) << endl; 

дает мне

4 

Однако, когда я сразу напечатать его значение

cout << myStruct->myVector[0].GetCoordinate(0) << endl; 

Сообщение об ошибке:

enter image description here

+2

Вы проверили 'myStruct-> myVector.size()'? – Zeta

+0

Что нужно знать о 'typeid' и' sizeof' в C++, является то, что они являются операторами * compile time *. То есть, они выполняют свою «магию», когда источник компилируется, а не когда программа работает. Вот почему они работают, даже если нормальный доступ не работает. –

+1

Есть две вещи, которые я хотел бы знать. Первый - это размер 'myStruct-> vector'. Другое дело, что делает «GetCoordinate». –

ответ

3

Ваш вектор пуст. Любой индекс, который не находится между 0 и .size() (за исключением последних), находится за пределами допустимого диапазона. Поскольку нет индекса между 0 и 0, каждый индекс выходит за пределы допустимого диапазона.

Необходимо сначала заполнить свой вектор, например. используйте .resize или .push_back.

1

Издание вызвано следующими причинами:

tlen = __byte_encode_array(buf, offset + pos, maxlen - pos, &this->data[0], this->size);

Невозможно получить доступ к несуществующий элемент в векторе.

Смежные вопросы