Вектор вставки вылетает программа - PullRequest
3 голосов
/ 01 октября 2010

Может кто-нибудь сказать мне

, почему это приводит к сбою моей программы?Предполагается, что все сделано так, чтобы в порядке расположения все элементы вектора t были расположены (y + высота).

Редактировать: вылетает в строках с вставкой в ​​них.

void createDrawOrder(vector<Thing*> t, vector<int> *order) {
        int min = t[0]->y + t[0]->height;
        int max = t[0]->y + t[0]->height;

        vector<int>::iterator it;

        it = order->begin();

        order->push_back(0);

        for (int i = 1; i < (int) t.size(); i++) {
            if ((t[i]->y  + t[i]->height) < min) {
                min = (t[i]->y  + t[i]->height);
                order->insert(it, i);
            }

            else if((t[i]->y + t[i]->height) >= min && (t[i]->y + t[i]->height) < max){

                int tempsize = (int) order->size();

                for (int j = 0; j < tempsize; j++){
                    if((t[i]->y + t[i]->height) <= (t[(*order)[j]]->y + t[(*order)[j]]->height)){
                            order->insert(it + j, i);
                    }
                }
            }

            else if ((t[i]->y + t[i]->height) >= max) {
                max = (t[i]->y + t[i]->height);
                order->push_back(i);
            }
        }

    }//end method max

1 Ответ

8 голосов
/ 01 октября 2010

Ваш итератор it не гарантированно будет действительным после order->push_back(k);, который может перераспределить элементы в вашем векторе.Поскольку я не вижу, чтобы вы на самом деле увеличивали it, я бы рекомендовал более уродливое решение заменить его на order->begin() в этой функции.

...