2010-10-01 12 views
3

Quelqu'un peut-il me direProgramme de plantages d'insertion de programme

pourquoi cela bloque mon programme? Il est supposé faire en sorte que l'ordre ait tous les éléments du vecteur t situés par (y + hauteur). Edit: se bloque sur les lignes avec "insert" dans les.

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 

Répondre

8

Votre iterator it n'est pas garanti pour être valide après order->push_back(k); qui peut réallouer les éléments de votre vecteur. Puisque je ne vous vois pas réellement incrémenter it n'importe où, je recommanderais la solution la plus laide de le remplacer par order->begin() dans cette fonction.

+1

qui a fonctionné. J'accepterai cette réponse dès que possible.^_^ – William

+0

@William: Merci :) – Jacob