Microsoft Visual Studio 2010 способна максимизировать внутренний вектор?

0

Я делаю программу по упрощению сетки, и я столкнулся с проблемой. Поскольку лица и вершины, которые я читаю, имеют огромное количество, когда я пытаюсь выполнить некоторую обработку на таких лицах, как (нахождение нормали каждого лица, отслеживание краев), мои циклы могут достигать нескольких тысяч или даже десяти тысяч,

Однако, когда я пытаюсь выполнить отладку, программа выйдет из строя и сообщит мне, что

vector subscript is out of range

Ошибка возникает здесь во внутреннем файле <vector>:

#if _ITERATOR_DEBUG_LEVEL == 2
    if (size() <= _Pos)
        {   // report error
        _DEBUG_ERROR("vector subscript out of range");
        _SCL_SECURE_OUT_OF_RANGE;
        }

 #elif _ITERATOR_DEBUG_LEVEL == 1
    _SCL_SECURE_VALIDATE_RANGE(_Pos < size())

Поэтому мне интересно, есть ли способ увеличить вектор MVS 2010? Извините, если мой вопрос звучит глупо.

ok: ниже мой код: я нахожу нормальный для каждого лица

Face *f;
Point P1;
Point P2;
Point P3;
Point normal;

for(int i=0; i<F.size(); i++)
{
    f = F[i];
    P1 = V[F[i]->a]->coord;
    P2 = V[F[i]->b]->coord;
    P3 = V[F[i]->c]->coord;

    float V21a = P2.x - P1.x;
    float V21b = P2.y - P1.y;
    float V21c = P2.z - P1.z;
    float V31a = P3.x - P1.x;
    float V31b = P3.y - P1.y;
    float V31c = P3.z - P1.z;

    normal.x = V21b*V31c - V21c*V31b;
    normal.y = V21c*V31a - V21a*V31c;
    normal.z = V21a*V31b - V21b*V31a;

    float normalize = sqrt(pow(normal.x,2) + pow(normal.y,2) + pow(normal.z,2));

    normal.x = normal.x / normalize;
    normal.y = normal.y / normalize;
    normal.z = normal.z / normalize;

    float d = -1 * (normal.x*P2.x + normal.y*P2.y + normal.z*P2.z);

    f->plane[0] = normal.x;
    f->plane[1] = normal.y;
    f->plane[2] = normal.z;
    f->plane[3] = d;

}

F is a list of faces
V is a list of vertex

Программа работает абсолютно нормально, если F.size() меньше 500, но сбой при превышении этого.

  • 3
    Вот где сообщается об ошибке, но не там, где ошибка. Вы пытаетесь получить доступ к элементу, которого нет в векторе.
  • 4
    Вы должны показать свой код. Вы получаете доступ к элементу, который находится вне диапазона вектора.
Показать ещё 4 комментария
Теги:
vector
visual-studio-2010

1 ответ

0

Насколько я вижу, проблема заключается не в размере F.

Я бы посмотрел:

P1 = V[F[i]->a]->coord;
P2 = V[F[i]->b]->coord;
P3 = V[F[i]->c]->coord;

На данный момент вы, вероятно, пытаетесь получить доступ к индексу внутри V, которого не существует. Взгляд на столбец в то время, когда возникает ошибка, должен показать, откуда произошло недопустимое значение.

Вы также можете добавить некоторые утверждения в этих строках, чтобы позволить отладчику дать вам ошибку, как только значение выходит за рамки.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню