Bonjour,

Je suis entrain de developper une fonction permetant de mettre un fichier de taille inconnu en memoire afin de le traiter mais mon programme plante sans generer d'erreur d'allocation ni d'erreur Windows arriver a un un certain nombre de ligne en memoire.

Voici ma source :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
 
 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
int main()
{
  char *buffer;
  char ligne[80]="";
  int i=0;
  //Execution de la commande HELP dans un fichier
  system("help > tmp");
  //Ouverture du fichier
  FILE * file = fopen("tmp", "r");
  //Lecture de la premiere ligne
  fscanf(file, "%80c",&ligne);
  //allocation d'un espace memoire de la taille de la chaine recuperé
  buffer = (char*)malloc(strlen(ligne)+1);
  //Tant que se n'est pas la fin du fichier on boucle
  while(!feof(file)){	
                          //concatenation de buffer avec ligne
                          strcat(buffer,ligne);
                          //lecture de la ligne suivante
                          fscanf(file, "%80c",&ligne);
                          //Reallocation de l'espace en prenant compte de la taille de la nouvelle ligne
                          buffer = (char*)realloc(buffer,strlen(buffer)+strlen(ligne));
                          if (buffer == NULL){
                                     // Si l'allocation echou, affichage d'un message et on sort de la boucle
                                     printf("Probleme de memoire !");
                                     system("PAUSE");
                                     break;
                          }
  }   
  //Affichage du fichier charger
  printf("%s\n",buffer);
  //Fermeture du fichier
  close(file);
  //Liberation de l'espace memoire alloué
  free(buffer);
  system("PAUSE");
  return 0;
}
Je developpe avec DEV c++ sous Windows XP SP2

Quelqu'un aurait-il une idées de la cause de ce probleme ?

Merci a vous.

nairolf_.