Tri_fusion en C qui ne fonctionne pas - C - Programmation
Marsh Posté le 11-11-2010 à 19:46:17
Explique davantage...
Marsh Posté le 11-11-2010 à 20:13:37
Ben quand j'execute mon code il me renvoit pas le tableau trié et il m'efface des valeurs j'ai l'impression.
Marsh Posté le 11-11-2010 à 23:10:33
Code :
|
ceci n'est pas possible en C. Le compilateur a besoin de connaitre une taille fixe pour allouer la zone mémoire. Comme n1 et n2 ne seront que connue lors de l’exécution de ton code, le compilateur alors alloue deux tableaux de dimension 1. ( c 'est a dire int tab[1] et non tab[n] )
Pour allouer des tableaux dynamiquement en C y faut utiliser la fonction malloc:
ex:
Code :
|
et ne pas oublier de libérer les tableaux avec free. Afin d'éviter des fuites de mémoire.
par exemple dans ta fonction fusion ca donnerai:
Code :
|
Marsh Posté le 12-11-2010 à 00:00:42
Aussi, tu déclares en ligne 5 int L[n1+1] donc un tableau de n1+1 éléments indexés de 0 à n1 et tu dis en ligne 13 L[n1+1]=101, donc tu écris à l'extérieur de ton tableau, ça ne peut faire que des dégâts.
Marsh Posté le 12-11-2010 à 15:54:02
lemxl a écrit :
|
C'est tout a fait possible depuis le C 99. Chercher VLA (Variable Length Array) avec google pour plus de détails.
A+,
Marsh Posté le 15-11-2010 à 18:02:29
kikoolol13 a écrit : Bonjour, |
Je ne sais pas si c'est le seul problème, mais quand tu fusionnes L et R dans A il manque des vérifications pour que i et j ne débordent pas. Sans ces vérifications tu vas aller lire des valeurs non définies au delà des limites de L, jusqu'à ce que k == fin.
lemxl a écrit : Pour allouer des tableaux dynamiquement en C y faut utiliser la fonction malloc:
|
Pourquoi ne pas utiliser memcpy pour recopier les éléments ?
edit : pour clarifier l'exemple je suppose, non ?
Marsh Posté le 11-11-2010 à 17:27:59
Bonjour,
j'ai un problème avec mon tri et je n'arrive pas à voir où :
Merci de votre aide