Besoin d'un coup de main pour déboguer mon algo de tri [C++] [résolu] - C++ - Programmation
Marsh Posté le 15-12-2007 à 19:29:21
Mouais, de toute évidence ta fonction "echanger" n'est que la partie visible de l'iceberg et ce qui a provoqué l'erreur se situe bien en-dessous de ta pile d'appel des fonctions.
Poste plus de code.
Marsh Posté le 15-12-2007 à 21:14:41
Ta fonction echanger semble correcte.
0x0000000000400fb0 in echanger (t=Cannot access memory at address 0x7fffcde9efe8 |
=> Apparemment, tu demandes un accès hors des limites de ton tableau t.
Donc :
- vérifie la mémoire que tu alloues (N) pour ce tableau;
- vérifie que tes index i et j ne dépassent l'indice N-1 du dernier élément du tableau.
N'hésite pas à envoyer d'autres bouts de code si nécessaire.
Marsh Posté le 16-12-2007 à 01:01:13
Merci de vos messages, j'ai réussi à trouver ou celà bloque, en fait je test plusieurs tri différents, cela bloque sur le tri rapide quand je lui balance un tableau déjà trié, le temps est de l'ordre de 60 secondes pour 100 000 éléments, contre environ 0.6 secondes pour le même tableau non trié !
Je dois avoir une erreur forcément ! mais je ne trouve pas du tout !
Je vous donne un extrait du code, ce qui sert là ou ça plante :
Code :
|
Voilà, en k = 2, j'ai déjà le tableau t_rapide déjà trié du coup d'avant, je le retrie et cela est très long, même tandis que tous les autres tris fonctionnent rapidement.
edit : je rajoute l'algo de tri rapide :
Code :
|
Quand j'interompt l'execution avec gdb lorsque qu'il bloque, je suis dans la boucle for entre les lignes 5 à 14 ici.
Je reste sur mon PC tant que j'ai pas trouvé, faut que je lance l'algo cette nuit pour faire des tests en boucle pour un rendu lundi, si vous avez la bonté de m'aider, c'est avec très grand plaisir !
Je peux donner plus de code si il faut, voir tout le source si besoin est.
Merci beaucoup d'avance !
Marsh Posté le 16-12-2007 à 02:24:18
En ignorant le tri rapide pour un tableau déjà trié, j'ai segmentation fault à partir de 700 000 éléments dans mon tableau...
Je comprends vraiment pas d'ou ça vient !
Si vous pouvez tester le programme sur votre machine et voir si ça fait pareil.
http://unlimitedriders.free.fr/test/projet2.cc
Supprimez la condition ligne 133 et 137 pour ne plus qu'avoir :
if (t==0) tri_rapide(t_rapide,0,n-1);
else tri_tas(t_tas,1,n);
Et essayez en mettant n = 10 000 comme premiere valeur.
J'en demande beaucoup et même trop je sais, mais si quelqu'un peut m'aider il me sauverai la vie (ou presque !!!).
Marsh Posté le 16-12-2007 à 12:09:12
Je m'en suis toujours pas sorti !
En écrivant ce seulement ça, que je me sers dans mon programme pour générer des tableaux aléatoires :
Code :
|
Code :
|
Ca plante comme dans mon programme, j'ai l'impressession.
Dans mon programme ça plante avant, mais c'est peut être parce que j'ai plusieurs tableaux, un exces de mémoire ou autre ?
Marsh Posté le 16-12-2007 à 13:36:24
deja si tu faisais des new et des delete au lieu de tes moche et pas standard int t[n], ca irait un peu mieux. 10$ que tu petes la pile d'appel avec tes 15000000 int dans un tableau statique.
Marsh Posté le 16-12-2007 à 16:20:17
J'avais pas pensé à ça !
En gros je remplace tout les int [] par :
int *t2;
t2 = new int [n];
?
Marsh Posté le 16-12-2007 à 16:49:53
Bon tu avais raison !
J'ai passé mon week end à chercher pour une connerie comme ça !
Marsh Posté le 15-12-2007 à 16:52:53
Hello !
Je test des algo de tris pour calculer le temps d'execution selon le nombre de données.
A partir de 130 000 éléments dans mon tableau ça plante, (je vais de 10 000 en 10 000, ça plante donc entre 120 000 et 130 000).
Je sais très peut utiliser gdb mais en mettant un break point, j'obtiens ça à l'execution :
Sachant que la fonction échanger est :
Voilà, je n'ai absolument aucune idée de ce que je peux faire d'autre, je ne balance pas tout le code, il y a plus de 400 lignes, si vous pouvez m'orienter ou m'aider, c'est avec grand plaisir !!!
Message édité par Fused le 16-12-2007 à 16:50:44