[C] boucle infinie introuvable

Fermé
stroumpf Messages postés 289 Date d'inscription mardi 17 juin 2008 Statut Membre Dernière intervention 1 mars 2009 - 16 sept. 2008 à 09:04
stroumpf Messages postés 289 Date d'inscription mardi 17 juin 2008 Statut Membre Dernière intervention 1 mars 2009 - 16 sept. 2008 à 10:10
Bonjour,
j'ai fait une fonction que je lai testé sur un fichier texte petit et ca merche bien , mais quand je l'ai testé sur 1 fichier de 26000 lignes , l'execution ca resté plusqu'une heure !!! :(
on m'a dit qu'il ya une boucle infinie, or moi j'ai passé une journée la cherché, mais rien trouvé.
qui veut m'aider?
merci

2 réponses

dubcek Messages postés 18758 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 24 décembre 2024 5 623
16 sept. 2008 à 09:50
hello
montre nous le code
0
stroumpf Messages postés 289 Date d'inscription mardi 17 juin 2008 Statut Membre Dernière intervention 1 mars 2009 2
16 sept. 2008 à 10:10
merci dubcek

int main (void)
{
int res = 0;
FILE *F = NULL;
char mot[100];
int i, j;
unsigned int cle, pt;
SListe *seq2 = NULL;
SListe **seq;

Liste **TableHash;
TableHash = (Liste **) malloc (TAILLEHASH * sizeof (Liste *));
for (i = 0; i < TAILLEHASH; ++i)
TableHash[i] = NULL;

pt = hash_cle (".");

printf ("debut du programme \n----------------------------------\n");
F = fopen (PATH, "r");
printf ("Ouverture du Fichier \n----------------------------------\n");
while (fscanf (F, "%s", mot) == 1)
{
cle = hash_cle (mot);
if ((cle != pt) && (!ChercherMotDansTableHash (TableHash, mot)))
TableHash[cle] = InsertionEnTete (TableHash[cle], mot, cle);
if (fgetc (F) == EOF)
break;
}
fclose (F);
AfficherTableHash (TableHash);
printf ("nombre de lignes \n----------------------------------\n");


F = fopen (PATH, "r");
if (F != NULL)
{

char buffer[BUFSIZ];
int nb_read;

while ((nb_read = fread (buffer, 1, sizeof buffer, F)) > 0)
{
int i;

for (i = 0; i < nb_read; i++)
{
if (buffer[i] == '\n')
{
res++;
}
}
}
fclose (F);
printf ("%i\n", res);
}
else
{
perror (PATH);
}

F = fopen (PATH, "r");
PosLigne (F, TableHash);
.......}
le code est long.
mais le probleme c'est que je fais 2 lecture d'un fichier texte alors qu'il faut faire 1 seule lecture pour gagner le temps.
une 1ere lecture pour stocker les mots du fichier dans un table de hachage, et a chaque fois on lles attribue leurs liste de coordonnées (num-ligne , position),
alor(s que moi j'ouvre à chaque operation le fichier.
0