2010-10-01 104 views
3

谁能告诉我向量插入程序崩溃程序

为什么这会导致我的程序崩溃?假设它是这样的,所以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 

回答

8

你的迭代器it不能保证order->push_back(k);可以重新分配在您的载体元素后有效。由于我没有看到你在任何地方实际增加了it,所以我建议在这个函数中使用order->begin()代替它的丑陋解决方案。

+1

工作。我会尽快接受这个答案。^_^ – William 2010-10-01 03:31:26

+0

@William:谢谢:) – Jacob 2010-10-01 03:34:05