Bonjour,
J'ai un petit pb à l'execution de ce prog. Il compile et les liens sont fait sans erreur ni warning.
Par contre lorsque j'appelle le sous-programme "denombrement", l'ordi plante. Apparement, il fait bien le tab2 et le met dans 0 dans toutes les cases et ensuite il plante. Je ne comprend vraiment pas pourquoi, l'algorithme me semble bon en plus. Est-ce que la taille du tableau peut jouer: tab2 peut avoir 30000 cases?
Voici mon programme:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
void denombrement(int* tab,int max);
void main(void)
{
//Initialisation des variables
int max =0;
int i = 0;
int temp = 0;
int* tab = NULL;
printf("\n Entrer la longueur du tableau \n");
scanf("%d",&max);
tab = (int*)malloc(max*sizeof(int));
// int tab[8]={5,10,6,7,3,6,9,0};
//valeur au hasard
srand( (unsigned)time( NULL ));
for( i = 0;i < max;i++ )
tab[i]=rand();
//Présentation du tableau
printf("\n **** Tableau de depart **** \n");
for(i=0;i<max;i++)
printf("%d \n",tab[i]);
denombrement(tab,max);
free(tab);
}
void denombrement(int* tab,int max)
{
int i = 0;
int k = 0;
int lg = max;
int* tab1 = NULL; // Tableau de compte
//int* tab2 = NULL; // Tableau de résultats
//recherche de la valeur maximale du tableau
for(i=0;i<max;i++)
{
if(tab[i]>k)
k=tab[i];
}
//Construction du "tableau de compte"
tab1 = (int*)malloc(k*sizeof(int));
for(i=0;i<k;i++)
{
tab1[i]=0;
}
/*
for(i=0;i<max;i++)
{
tab1[tab[i]]=tab1[tab[i]]+1;
}
for(i=1;i<k;i++)
{
tab1[i]=tab1[i]+tab1[i-1];
}
//Construction du tableau de résultats
//tab2 = (int*)malloc(lg*sizeof(int));
for(i=0;i<lg;i++)
{
tab2[i]=0;
}
for(i=max;i=1;i--)
{
tab2[tab1[tab[i]]]=tab[i];
}
*/
//free(tab2);
free(tab1);
}
Une petite indication m'aiderait beaucoup. Merci d'avance!
tom