Pb d'"allocation mémoire avec STL string - C++ - Programmation
Marsh Posté le 14-11-2002 à 03:02:16
Code :
|
Et à mon avis, il y a encore moyen de simplifier.
Je me pose la question: pourquoi 1 et -1 ?
Les strings commençant à 0, j'en déduis que les séparateurs sont une suite de '-', sauf les premiers/derniers.
Mais alors, la première séquence de longueur "length()-2" n'est jamais égale à la seconde de longueur "lenght()" ?
Détail:
Code :
|
Sinon, je ne vois pas de problème... ni l'astérisque !
Marsh Posté le 14-11-2002 à 14:38:06
J'ai essayé de mettre un peu d'ordre dans tout ca...
L'erreur reste la même,
mais l'endroit du code ou le plantage survient lui change....
Je n'ai rien fait de spécial pour ca
je travaille sur une application console, est il possible que
la mémoire vienne a être insuffisante ...
ou que l'allocation soit inefficace apres telle ou telle seuil,
...???!!
je suis a cours d'idées
Marsh Posté le 15-11-2002 à 20:33:20
A Y EST !! :-)
bon la méthode qui jetais l'exception ( celle dont g placé une partie du code dans le 1° post ) étais appelé plusieur fois par une boucle par la méthode pricipale de la classe.
Cette méthode principale , danse reste du corps de la boucle
effectuée une concaténantion de liste de string
pour cela elle utilisait copy() qui n'ets pas une méthode du container liste...
Code :
|
ceci marchait avec Builder 5 ( stl rogue vave... je sais plus )
ceci dit pares l'appel a copy g decouvert que les varaibles de la méthode pricipale étai afféctées avec das valeurs coorrespondantes aux deux listes de string .....!!!
g échangé copy par un splice() du container
et ca marche tres bien
je pense que copy , du fait que la fonction n'utilise pas la gestion mémoire spécifiée par la classe allocator du template list<string>, ne pouvait pas covenablement creer deux nouveaux éléments avec la stlPort...??
je sais pas trop, j'espere qu'un jour je comprendrais mieux l'allocation de la stl
je vais m'y pencher dessus
4 jours de recherche... LOL
merci musaran pour ton aide
Marsh Posté le 15-11-2002 à 23:33:12
container::end() est un non-élément, je suis pas sur qu'on ait le droit de le spécifier comme destination.
Surtout pour une liste chaînée qui doit allouer chaque élément.
Je crois que c'est back_inserter ou push_back qu'il faut utiliser.
Mais comme j'ai pas encore utilisé tout ça, c'est flou pour moi.
Marsh Posté le 13-11-2002 à 12:06:53
Voila mon problème, ca fait maintenant un moment que je suis sur ce problème d'allocation mémoire, et le commence sérieusement à être a cours d'idée.
je travaille dans mes classes avec des liste de string déclrées comme suit
Ainsi je peux allègrement passer mes données texte à mes différents objets sans problèmes.
Je suis récemment passé à la version 6 de builder. Je suis incapable de dire cet élément ( le passage à la STL port ) est à prendre a compte pour le problème suivant :
une erreur d'exception ( Voilation d'accès ... à l'adresse .... )
lors d'un push_back dans une liste de string :
le code ci dessus se charge juste de vérifier la présence d'éventuels doublons et de gérér l'ajout d'une nouvelle entrée à la liste en remplaçant la 1° lettre du nouveauy string par une astérique
la pile d'appel donne les informations suivantes :
je précise avoir essaye de changer ce morecau de code d'emplacement , de méthode.
les string contiennent bien des valeurs et la liste et bien initialisée.
La méthode ne plante pas à sa première execution....
le debugger pointe la méthode allocate du fichier _alloc.h
je ne pense pas qu'il soit terriblement utile d'essayer de refaire ce code
puisque des parcours de liste de string en ce genre sont déja en place dans mon programme en divers endroit et fonctionnement parfaitement.
Merci pour vos suggestion.