Erreur de segmentation (C)

Axblade28 Messages postés 95 Statut Membre -  
fiddy Messages postés 11653 Statut Contributeur -
Bonjour,

Lorsque j'exécute mon programme il s'affiche une erreur de fragmentation. J'aimerais savoir ou se situe l'erreur dans mon code.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int nombredeligne()	{

FILE* fichier = NULL;
int caractereActuel = 0;
int nbrentrees = 0;
char *tableau;
int i = 0;

fichier = fopen("access_log", "r");

if (fichier != NULL)	{
caractereActuel = fgetc(fichier);
	while (caractereActuel != EOF)	{
		
	tableau[i] = caractereActuel;
	
	if (tableau[i] == '\0')	{
		nbrentrees++;	}	
		
	
	i++;	
	caractereActuel = fgetc(fichier);

					}
fclose(fichier);



return nbrentrees;
			}
return 0;

			}


Je cherche à stocker dans un tableau un fichier de log afin de pouvoir y récupérer les données voulues.

Merci d'avance.

8 réponses

nic244 Messages postés 140 Statut Membre 8
 
defragmente tout le dossier du programme
0
Axblade28 Messages postés 95 Statut Membre 7
 
c'est à dire ?
0
nic244 Messages postés 140 Statut Membre 8
 
tu clique droit sur le dossier puis selectionne defragmenter si tu n'as pas cette options tu tape dans la commande defragmentation ou defragmenteur et tu verra le programme s'afficher puis clique dessus et fais une defragmentation complete de l'ordinateur
0
fiddy Messages postés 11653 Statut Contributeur 1 847
 
Loool. Faut pas confondre fragmentation et segmentation ^^. Rien à voir.
0
nic244 Messages postés 140 Statut Membre 8
 
si tu n'as pas de logiciel de defragmentation je te conseil auslogic disk defrag ;) il est gratuit
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Axblade28 Messages postés 95 Statut Membre 7
 
Je pense pas que cela vienne de ça car le programme est pour le moment très simple je viens d'isoler l'unique fonction, je pense que ce n'est pas à cause d'un fichier fragmenté.
0
nic244 Messages postés 140 Statut Membre 8
 
fait ce que tu veux jte donne juste un conseils par rapport a ce que je sais ;)
0
fiddy Messages postés 11653 Statut Contributeur 1 847
 
Bonjour,

Le problème vient du pointeur.
char *tableau;

tableau[i]=...;

Ce n'est pas bon et cela provoque une erreur de segmentation puisque t'écris dans une zone non allouée.
Il faut que tu réalises l'allocation avec malloc. Par exemple : tableau=malloc(taille);
Ensuite tu pourras écrire dans le tableau.
Ou alors si tu connais la taille à l'avance tu peux faire directement : char tableau[TAILLE];

Cdlt,
0
Axblade28 Messages postés 95 Statut Membre 7
 
Je le fais ca n'a rien changé :/
0
fiddy Messages postés 11653 Statut Contributeur 1 847
 
C'est que tu as une autre erreur ailleurs ou que tu l'as mal fait.
Par exemple, tu peux pas te permettre de faire malloc(10) comme ça. Il faut connaître le nombre d'éléments par avance.
Fais l'essai avec un petit fichier de 50 caractères. Et fais une allocation de 50, là ça marchera.
0