Problème d'allocation dynamique [C++] - C++ - Programmation
Marsh Posté le 16-12-2007 à 18:57:48
salut
Tu as vérifié que les pointeurs étaient valides apres les new?
Marsh Posté le 16-12-2007 à 18:59:23
Ca se vérifie comment ?
Je précise que si j'enlève les delete ça fonctionne, mais voilà la mémoire que ça prends au fur et à mesure !
Marsh Posté le 16-12-2007 à 19:02:37
il me semble que le pointeur = NULL si new echoue
Marsh Posté le 16-12-2007 à 19:05:02
Le new fonctionne puisque que ça fonctionne sans les delete.
C'est les delete qui me font tout planter.
Marsh Posté le 16-12-2007 à 19:11:28
ben alors ça vient du code entre le new et les delete...
t'y modifies pas la valeur de tes pointeurs?
T'as debuggé pour savoir quel delete plante?
Marsh Posté le 16-12-2007 à 19:40:16
Une fois créé, je m'en sert comme des tableaux, je modifies les données et c'est tout.
Marsh Posté le 16-12-2007 à 22:02:26
l'erreur peut indiquer que tu modifies les données légèrement au dessus ou au dessus du tableau, genre tu modifie un t[-1] ou un t[N].
Marsh Posté le 16-12-2007 à 22:31:23
Si il utilise vector pour accéder à un élément il vaut mieux utiliser la fonction membre "at()" plutôt que l'opérateur [] ( at() vérifie les bornes alors que l'opérateur[] est plus rapide mais ne vérifie rien).
Marsh Posté le 16-12-2007 à 22:36:46
Je connais pas encore assez bien la prog pour ça, j'ai commencé C++ il y a 2 mois (j'avais quand même fait pas mal de java objet avant).
Je me suis arrangé en trafiquant, mais je pense pas que je dépasse un tableau vu que dans certains cas j'arrive à faire varier n jusqu'a 10 millions.
Ce sont certains opérations de tri avec des tableaux déjà triés qui me provoquent cette erreur.
Marsh Posté le 16-12-2007 à 23:00:51
1/ utilise std::vector didiou
2/ tu sais te servir d'un debugegr ?
3/ ton algo est certainement moisi
Tu fais ca pr apprendre ou pour developper ? Si c'est pour developper : std::sort
Marsh Posté le 16-12-2007 à 23:14:07
Mon algo est très certainement moisi !
Je fais ça pour un projet pour la fac, donc pour apprendre, mais c'est plutôt les résultats des tests qui sont importants que la prog en elle même donc ça devrait passer, du moins j'espère !
Marsh Posté le 16-12-2007 à 23:18:00
ouais enfin prendre des habitudes de chacla, ca va etre super
rencarde toi sur vector et debug ton algo
Marsh Posté le 16-12-2007 à 23:28:28
J'aurai pas le temps pour celui ci malheureusement vu que je dois le rendre demain, j'ai mon rapport à terminer, mais j'ai retenu la leçons pour la prochaine fois !
Je regarderai vector au passage un de ces jours, merci pour les conseils en tous cas.
Si tu veux t'arracher les cheuveux voilà mon code
unlimitedriders.free.fr/test/projet2.cc
Marsh Posté le 17-12-2007 à 12:35:59
ptitchep a écrit : salut |
Vérifie aussi que true est bien true, juste au cas ou.
Marsh Posté le 23-12-2007 à 23:07:45
Taz a écrit : Vérifie aussi que true est bien true, juste au cas ou. |
Code :
|
Plus serieusement, le message d'erreur provient de l'allocateur dynamique de la glibc. Tu ecris bien trop loin dans un de tes tableaux et t'ecrases les meta-donnees de l'allocateur.
Alors, fait des vectors et utilise .at(size_t), t'auras bien un vieille exception pour te dire ou est-ce que tu fais de la deaube. Si t'as peur des perfs des vector (et des nb realloc qui peuvent tomber), tu commence par un bon reserve(size_t) et c'est tout bon.
Marsh Posté le 16-12-2007 à 17:38:24
Toujours sur mon algo de tri, j'ai un problème avec des tableaux en allocation dynanique :
Il est bien évident que je dois supprimer les tableaux au fur et à mesure sinon ça me prends toute ma mémoire, mais ça me met un très joli message à l'execution :
Vous voyez d'ou ça vient ?
Merci !