Clonk
Messages postés278Date d'inscriptionmardi 22 janvier 2002StatutMembreDernière intervention29 août 2006
-
14 nov. 2004 à 16:33
cs_djl
Messages postés3011Date d'inscriptionjeudi 26 septembre 2002StatutMembreDernière intervention27 novembre 2004
-
15 nov. 2004 à 14:58
Bonjour,
voilà, j'ai un problème avec de vector, voilà en gros comment je marche:
J'ai 2 vectors : un de sommets, un autre d'arrete (de segment)
je parcours le vecteur d'arrete, si j'ai 2 segments qui se coupent, je supprime ces 2 Arretes et j'en crée 4 grâce au point d'intersection des 2 précédents.
Pour les rajouter, je fais comme ça:
ARRETE * N_A1 = new ARRETE(S, _A1->getP1());
ARRETE * N_A2 = new ARRETE(S, _A1->getP2());
ARRETE * N_A3 = new ARRETE(S, _A2->getP1());
ARRETE * N_A4 = new ARRETE(S, _A2->getP2());
L_A.erase(L_A.end() - (size + (i - 1)));
L_A.erase(L_A.end() - (size + (i - 1)));
L_S.resize(L_S.capacity() + 1);
L_A.resize(L_A.capacity() + 2);
L_A.push_back(N_A1);
L_A.push_back(N_A2);
L_A.push_back(N_A3);
L_A.push_back(N_A4);
L_S.push_back(S);
apparemment, ça marche bien, les resize() se font nikel.
Mais quand j'arrive sur le L_A.push_back(N_A1); ça plante, erreur mémoire.
Clonk
Messages postés278Date d'inscriptionmardi 22 janvier 2002StatutMembreDernière intervention29 août 2006 14 nov. 2004 à 17:12
bah G essayé avec size(), ça me donne la meme erreur.
Et je vois pas pkoi je ferais péter ma mémoire avec capacity(), au lieu de retourner le nombre d'éléments avec size(), il me retourne le nombre total d'éléments que je peux mettre.
Et ça la fait pas exploser puisque C au premier passage dans ce code que ça plante.
Clonk
Messages postés278Date d'inscriptionmardi 22 janvier 2002StatutMembreDernière intervention29 août 2006 14 nov. 2004 à 20:40
bah ça me sert que quand je fais mon erase(), ça me libère 2 éléments dans mon vector, don j'ai pas de problème pour rajouter 2 nouveaux élémentns, mais dèe que je dois en rajouter 1 un nouveau (donc à partir du 3ème G un debug assertion failed (précédé par un "user breakpoint called") sous Visual.
Donc je pensais que j'avais un problème avec mon vector qui voulait plus me gérer de dépassement sur mon vector. Mais apparemment C pas ça.
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_djl
Messages postés3011Date d'inscriptionjeudi 26 septembre 2002StatutMembreDernière intervention27 novembre 20047 14 nov. 2004 à 21:05
c'est le 3e ou le 1er qui plante ?
et pour les histoires de taille et capacité pour vector, essay de voir (dans ta tete) ce que ca fais quand tu fais un resize() en te servant de la capacité
ca fais un vecteur troué, et tu sais meme pas ou se trouve tes données
donc je te conseille (mais si c'est pas la ton probleme) de rester avec
Clonk
Messages postés278Date d'inscriptionmardi 22 janvier 2002StatutMembreDernière intervention29 août 2006 15 nov. 2004 à 01:20
si je fais le resize(), C le premier, si je le fais pas, C le 3eme
en gros, l'algo de gestion de mes vectors C ça:
Si Se_coupent(v_segment[i], v_segment[j])
nouveau segment 1;
nouveau segment 2;
nouveau segment 3;
nouveau segemnt 4;
//On considère que les 4 sont issus de la section du point d'intersection des 2 qu'on vérifie
v_segment.effacer(v_segment[i]);
v_segment.effacer(v_segment[j]);
v_segment.ajouter(1);
v_segment.ajouter(2);
v_segment.ajouter(3);
v_segment.ajouter(4);
FinSi
cs_djl
Messages postés3011Date d'inscriptionjeudi 26 septembre 2002StatutMembreDernière intervention27 novembre 20047 15 nov. 2004 à 14:58
ok tu en crée 4
pour effacer quelque soit les indices i et j, fais plutot (si i<j)
v_segment.erase( v_segment.begin() + j );
v_segment.erase( v_segment.begin() + i );
et apres tu push_back, pourquoi tu voudrais faire un resize() ?
la seule chose à voir c'est le choix du conteneur, vector c'est pas ce qu'il y a de mieux pour faire des erase (dans ton cas tu pourrais faire une copie à la place des erase)