Afficher une séquence triée de nombres aléatoires (programmation en C)

Bonjour :slight_smile:
J’essaie de faire ce projet et donc voici mon code:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main() {
int i;
int max = 0;
int tab[i];
int seed;
printf(“Seed:”);
scanf("%d",&seed);

int lenght;
printf(“Lenght:”);
scanf("%d",&lenght);

if (lenght < 0)
printf(“La grandeur du tableau doit etre positive.\n”);

for(i = 0; i < lenght; i++) {
i = lenght ;

if (seed == 0) {
  srand (time (NULL));
  seed = 1;
}
else
  tab[i] = rand();

printf(“Voici le tableau de nombres aleatoires non tries:\n”);

for(i = 0;i < lenght;i++) {
printf("%d: %d\n",i,tab[i]);
}
}

for (i = 1; lenght > 0; i++) {
lenght–;

if (tab[i] > tab[max]) {
  tab[max] = tab[i];

  if (tab[i] > tab[i-1])
    tab[i] = tab[i-1];
}

printf(“Voici le tableau de nombres aleatoires tries:\n”);

for (i = 0; i < lenght; i++) {
printf("%d:%d",i,tab[i]);
}
}
return 0;
}

Mon programme compile mais lorsque je veux tester mon prog il me met “erreur de segmentation”.
J’utilise donc un débogueur pr comprendre ou se trouve cette faute et voici ce quil me met:
Program received signal SIGSEGV, Segmentation fault.
0x08048486 in main ()

je comprend qu’il y a la faute dans la fct main mais je ne comprend pas ou
Est-ce que vous seriez m’aider a comprendre ou se trouve ma faute?
merci d’avance

ps:je travaille sous linux (ubuntu)

Je viens d’essayer de déboguer pas à pas et je crois que l’erreur provient de ma variable “max” mais je ne sais pas vrmt comment le corriger…

Ya pas comment un probleme de réutilisation de la variable de boucle dans une boucle contenue dans celle ci ?
Normalement ca devrait te resortir une boucle infinie, mais peut etre que ca peut sortir une autre erreure
Edité le 17/02/2008 à 14:25

Tu ne saurais pas etre plus précis?J’ai pas trop compris ta remarque…^^

Le problème doit venir du dimensionnement de ta variable tab[]
Son dimensionnement doit être connu au moment de la compilation pour que ca fonctionne.
Ou alors, il faut que tu fasses une allocation mémoire


for(i = 0; i < lenght; i++) {
 i = lenght ;     <----------- Je comprend pas le but de faire une boucle si c'est pour initialisé la
                                     valeur du compteur à la meme valeur pour chaque itération

 if (seed == 0) {
  srand (time (NULL));
  seed = 1;
 }
 else
  tab[i] = rand();

 printf("Voici le tableau de nombres aleatoires non tries:\n");

 for(i = 0;i < lenght;i++) {          <----- Utilisation de i alors qu'on est déjà dans une boucle qui compte avec i
  printf("%d: %d\n",i,tab[i]);
 }
}

Edité le 17/02/2008 à 15:57

mci pr vos aides mes problemes sont réglés :stuck_out_tongue:

Edit : Rien dit
Edité le 17/02/2008 à 20:06