2010-10-01 109 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