begin process at 2012 05 30 05:26:40
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

Vector : problème


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Vector : problème

dimanche 14 novembre 2004 à 16:33:48 | Vector : problème

Clonk

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.

Quelqu'un aurait-il une explication?

Merci!
dimanche 14 novembre 2004 à 16:47:08 | Re : Vector : problème

djl

t'es sur de ce que tu fais en faisant

L_A.resize(L_A.capacity() + 2); ?

tu multiplie par 2 la taille du buffer, si tu fais ca dans un boucle tu fera craquer ta memoire en quelques itérations

a mon avis tu veux plutot faire

L_S.resize(L_S.size() + 1);
L_A.resize(L_A.size() + 2);
dimanche 14 novembre 2004 à 17:12:07 | Re : Vector : problème

Clonk

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.
dimanche 14 novembre 2004 à 17:36:36 | Re : Vector : problème

djl

si c'est dans une boucle qui fais plus de 20 itérations t'auras deja un buffer 1M de fois plus gros (et 1Mrd avec 30)

ca te sers a quoi de redimensionner sur la capacité? apres quand tu fais un push_back tes données seront plus contigues
dimanche 14 novembre 2004 à 20:40:51 | Re : Vector : problème

Clonk

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.
dimanche 14 novembre 2004 à 21:05:00 | Re : Vector : problème

djl

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

// redimensionne
L_S.resize(L_S.size() + 1);
L_A.resize(L_A.size() + 2);

tu sais ce que tu fais ? tu veux faire quoi précisement ? (algo qui concerne le vector)
lundi 15 novembre 2004 à 01:20:17 | Re : Vector : problème

Clonk

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

Voilà
lundi 15 novembre 2004 à 14:58:38 | Re : Vector : problème

djl

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)



Cette discussion est classée dans : a1, a2, push, arrete, back


Répondre à ce message

Sujets en rapport avec ce message

explode [ par thebigbang ] bonjour à tous,Je cherche une fonction C++ qui permettrait de créer des tableaux de chaine à partir d'une autre chaine que l'on aurait découpée en fon explode [ par thebigbang ] bonjour à tous,Je cherche une fonction C++ qui permettrait de créer des tableaux de chaine à partir d'une autre chaine que l'on aurait découpée en fon Idiomatique [ par ifren ] I NEED helpquels sont la ou les methodes , pour faire de l'heritage avec une methode abstraite, exempleA1 et A2 deux classes qui hertitent de la class Problème avec une Arboresence CTreeCtrl [ par sbleuze ] Je gère une arboresence à l'aide d'un CTreeCtrl.Ce que je n'arrive pas à faire, c'est que lorsque je suis sur un point de mon arborescence, et que je OpenGl en 3D [ par Jarod1980 ] Salut,C'est juste pour une petite information. En fait, je voudrais tracé avec Glut une courbe en 3D. Mon programme intègre un système de 3 équations Problème de manipulation des Iterator de la STL [ par keiko11245 ] Voilà mon problème j'ai fait le programme suivant : #include #include using namespace std; void getItem(list L, list<i Problème de fuite mémoire [ par franchouze ] Bonjour, Pour vérifier les fuites mémoires de mon programme j'utilise valgrind. Voici "l'oubli" de libération détecté par valgrind (ligne avant la Erreur calculatrice à base de switch [ par leguerinos ] Bonjour,La compilation de mon code me renvoie deux erreurs dont je n'arrive pas a determiner la cause. Pourriez-vous m'aider?Merci d'avance. ////// Quel est l'équivalent de vector<int> (c++) en C ? Et quel est celui de ....push_back(...); en C ? [ par ndubien ] Salut, Quel est l'équivalent de vector (c++) en C ?Et quel est celui de ....push_back(...); ?<font size Deux meme string dans un vecteur. [ par frayst ] Voila je vous explique ma situation : J'ai un vecteur string dans lequel jattribue des mots (dont certains sont les memes = Bonjour et Salut) : vector


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,250 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales