tomalille
Messages postés52Date d'inscriptionjeudi 16 juin 2005StatutMembreDernière intervention 5 juin 2007
-
12 sept. 2005 à 06:00
tomalille
Messages postés52Date d'inscriptionjeudi 16 juin 2005StatutMembreDernière intervention 5 juin 2007
-
12 sept. 2005 à 21:05
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?
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));
cs_AlexMAN
Messages postés1536Date d'inscriptionsamedi 21 décembre 2002StatutMembreDernière intervention24 mai 20091 12 sept. 2005 à 06:29
Vu l'heure qu'il est, ton code me semble bon a part un petit truc :
for(i=max;i=1;i--)
{
tab2[tab1[tab[i]]]=tab[i];
}
i = max va causer un 'petit' debordement de tampon, dans tab[], ptet ben dans tab1[] (si k <= max), et dans tab2[] assurément. Partir avec : for(i = max - 1; i >= 0; --i) {} peut peut etre arranger les choses. Mais attention, rien ne garantit que k sera > max, alors attention a comment tu penses ton prog...
tomalille
Messages postés52Date d'inscriptionjeudi 16 juin 2005StatutMembreDernière intervention 5 juin 2007 12 sept. 2005 à 20:24
effectivement, ca pourrait poser problème, mais ce n'est pas le cas car souvent k=25000 voire 30000, les veleurs étant prises au hasard. Au niveau de l'algorithme, il est bon car je viens d'aller le vérifier à la bibliothèque...bizare!!