IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Probleme avec la fonction realloc() !


Sujet :

C

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 13
    Par défaut Probleme avec la fonction realloc() !
    Bonjour

    j'ai un gros souci avec le redimensionnement d'un tableau de structure, en effet lorsque j'incrémente le tableau d'une case, le redimensionnement échoue !!! il me renvoie "Ré allocation impossible". J'ai également essayé avec une taille plus grande par exemple avec 2 cases de plus que prévue mais il se produit la même erreur pourtant le code m'a l'air d'être exact. J'explique le fonctionnement de mon programme: en gros je récupère des données nom,prénom etc... formatées dans un fichier créer au préalable puis je les insèrent dans un tableau dynamique dont la taille correspond au nombre de lignes du fichier (ou nombre d'enregistrements), j'insère ensuite un nouvel enregistrement, j'incrémente donc la taille du tableau de +1, j'agrandis donc le tableau de +1 case et c'est à ce moment là que sa plante.

    Par avance Merci !

    voici mon code :
    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
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    #include<stdlib.h>
    #include<stdio.h>
    #include<conio.h>
    #include<string.h>
     
    typedef struct profile profile;
    struct profile
    {
    int  id;
    char nom[20];
    char prenom[30];
    int  numtel;
    char email[20];
    };
     
    int main(void) {
    FILE *pf;
    char chaine[100],x[20]="osiris",x2[30]="ffff",x4[20]="dfodpp";
    int i,TAILLE_MAX=0,x3=25;
     
    pf = fopen("C:\\test.txt","r+"); 
     
    do
      {
        if (fgetc(pf)=='\n')
        {
        TAILLE_MAX++;
        }
    }while(!feof(pf));
    rewind(pf);
     
    profile * tab = NULL;
    tab = (profile *) malloc (TAILLE_MAX * sizeof(profile));
    if( tab == NULL )
    {
         fprintf(stderr,"Allocation impossible");
         exit(EXIT_FAILURE);
    }  
     
    if (pf != NULL)
        {
        i=1;
         do
           {
            fgets(chaine,100,pf);
            sscanf(chaine,"| %d | %s | %s | %d | %s |",&tab[i].id,tab[i].nom,tab[i].prenom,&tab[i].numtel,tab[i].email);
            i++;
           }while(!feof(pf));
        }
    for(i=1;i<=TAILLE_MAX;i++)   printf("| %d | %s | %s | %d | %s |\n",tab[i].id,tab[i].nom,tab[i].prenom,tab[i].numtel,tab[i].email);
     
    TAILLE_MAX++;
    profile *temp = NULL;
    temp = (profile *) realloc (tab,TAILLE_MAX * sizeof(profile));
    if ( temp == NULL )
    {
         fprintf(stderr,"Reallocation impossible");
         free(tab);
         exit(EXIT_FAILURE);
    }
    else {tab = temp;}
    free(temp);
    temp = NULL;
    strcpy(tab[i].nom,x);
    strcpy(tab[i].prenom,x2);
    tab[i].numtel=x3;
    strcpy(tab[i].email,x4);
    fseek(pf,0,SEEK_END);
    fprintf(pf,"| %d | %s | %s | %d | %s |\n",i,tab[i].nom,tab[i].prenom,tab[i].numtel,tab[i].email);
    fclose(pf);
    for(i=1;i<=TAILLE_MAX;i++) printf("| %d | %s | %s | %d | %s |\n",i,tab[i].nom,tab[i].prenom,tab[i].numtel,tab[i].email);
    getch();
    return 0;
    }
    le fichier ressemble a ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    | 1 | pddddd | fff | 23 | dfodp |
    | 2 | pddddd | fff | 24 | dfodp |

  2. #2
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    tab = (profile *) malloc (TAILLE_MAX * sizeof(profile));
    ....
        i=1;
         do
           {
            fgets(chaine,100,pf);
            sscanf(chaine,"| %d | %s | %s | %d | %s |",&tab[i].id,tab[i].nom,tab[i].prenom,&tab[i].numtel,tab[i].email);
            i++;
           }while(!feof(pf));
        }
    for(i=1;i<=TAILLE_MAX;i++)   printf("| %d | %s | %s | %d | %s |\n",tab[i].id,tab[i].nom,tab[i].prenom,tab[i].numtel,tab[i].email);
    Dans le sscanf et le printf, on sort des limites du tableau tab. i devrait être initialisé à 0 et strictement inférieur à TAILLE_MAX

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 13
    Par défaut
    J'ai rectifié et maintenant sa marche parfaitement Merci encore !!!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Probleme avec la fonction Ontimer
    Par Djule dans le forum MFC
    Réponses: 8
    Dernier message: 27/11/2005, 17h52
  2. Probleme avec la fonction rename()
    Par TheZenZen dans le forum C
    Réponses: 6
    Dernier message: 08/10/2005, 15h59
  3. [LG] Problème avec la Fonction ReadLn en fin de programme
    Par killermano dans le forum Langage
    Réponses: 6
    Dernier message: 23/07/2005, 15h16
  4. [LG]Probleme avec une fonction
    Par xavier1936 dans le forum Langage
    Réponses: 7
    Dernier message: 08/02/2005, 22h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo