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 :

Erreur bizarre : tableau 1D + ouverture fichier.


Sujet :

C

  1. #1
    Membre à l'essai
    Inscrit en
    Mars 2005
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 32
    Points : 19
    Points
    19
    Par défaut Erreur bizarre : tableau 1D + ouverture fichier.
    Bonjour,

    J'ai deux problèmes :

    1- la taille alouée de mon tableau 1D est limitée à 162 éléments, dés que je veux allouer un tableau 1D de plus de 162 éléments ça me donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Process terminated with status 1 (0 minutes, 1 seconds)
    0 errors, 0 warnings
    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
    75
    76
    77
    78
    #include <stdio.h>
    #include <stdlib.h>
    typedef enum Array_err_ {
        ARRAY_OK,
        ARRAY_ERR_NULL_ARG,
        ARRAY_ERR_SIZE,
        ARRAY_ERR_MEMORY,
        ARRAY_ERR_UNKNOWN
    } Array_err_e;
     
    //*** Fonction pour faire l'allocation dynamique de mémoire pour un  tableau 1D ***
    static int array1dfloat_new(float **array, int a)
    {
        int err = ARRAY_OK;
     
        if (array != NULL)
        {
            if (a > 0)
            {
                float *self = NULL;
     
                self = malloc( sizeof *self);
                if (self != NULL)
                {
                    int i;
                   /* Initialisation de tous les éléments à 0 */
                    for (i = 0; i < a ; ++i)
                    {
                        self[i] = 0.0;
                    }
                    *array = self;
                }
                else
                {
                    err = ARRAY_ERR_MEMORY;
                }
            }
            else
            {
                err = ARRAY_ERR_SIZE;
            }
        }
        else
        {
            err = ARRAY_ERR_NULL_ARG;
        }
        return err;
    }
     
    // *** Fonction pour libérer la mémoire allouée
    static void array1dfloat_free(float **array)
    {
        if (array != NULL)
        {
            float *self = *array;
            free(self);
            *array = NULL;
        }
    }
     
     
    int main(void)
    {
        int err = EXIT_SUCCESS;
        int arrer = ARRAY_OK;
        float *data = NULL;  // tableau 1D
     
        arrer = array1dfloat_new(&data,163); // si 162 à la place de 163 ça marche !!!???
        if (arrer != ARRAY_OK)
        {
    	fprintf(stderr, "Erreur d'allocation! data \n");
            err = EXIT_FAILURE;
        }
     
    array1dfloat_free(&data);
     
         return err;
    }
    2- 2éme problème est quand j'ajoute une simple ouverture et fermeture d'un fichier à un code qui marche il ne marche plus et le compilateur me donne le meme message d'echec precedent !!! pourquoi ??

    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
    int main(void)
    {
        int err = EXIT_SUCCESS;
        int arrer = ARRAY_OK;
        float *data = NULL;  // tableau 1D
        FILE *f1;
     
        arrer = array1dfloat_new(&data,100);// je réspecte la limite 163. 
        if (arrer != ARRAY_OK)
        {
    		fprintf(stderr, "Erreur d'allocation! data \n");
            err = EXIT_FAILURE;
        }
     
     
        f1=fopen("source.dat","w"); // sans l'ouverture et fermeture du fichier le code marche bien dés que j'ajoute le travail avec le fichier çà ne marche plus ?
        if (f1== NULL)
        {
            printf("Impossible d'ouvrire le fichier source.dat");
            exit (1);
        }
     
    fclose(f1);
    array1dfloat_free(&data);
     
         return err;
    }
    merci de m'aider a comprendre où est le problème??

  2. #2
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 40
    Points : 46
    Points
    46
    Par défaut
    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
    //*** Fonction pour faire l'allocation dynamique de mémoire pour un  tableau 1D ***
    static int array1dfloat_new(float **array, int a)
    {
        int err = ARRAY_OK;
     
        if (array != NULL)
        {
            if (a > 0)
            {
                float *self = NULL;
     
                self = malloc( sizeof *self);
                if (self != NULL)
                {
                    int i;
                   /* Initialisation de tous les éléments à 0 */
                    for (i = 0; i < a ; ++i)
                    {
                        self[i] = 0.0;
                    }
                    *array = self;
                }
                else
                {
                    err = ARRAY_ERR_MEMORY;
                }
            }
            else
            {
                err = ARRAY_ERR_SIZE;
            }
        }
        else
        {
            err = ARRAY_ERR_NULL_ARG;
        }
        return err;
    }
    A mon avis le problème vient d'ici
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    float *self = NULL;
    self = malloc( sizeof *self);
    Tu alloues de la mémoire pour un float alors que c'est un tableau de float ... donc tu auras de la place pour stocker n float (a priori 162).

    Il faudrait peut être mieux faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    float *self = NULL;
    self = malloc( a*sizeof *self);

  3. #3
    Membre à l'essai
    Inscrit en
    Mars 2005
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 32
    Points : 19
    Points
    19
    Par défaut
    merci bien de ton aide, tu as bien vu , j'ai oublié le " a* " .

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

Discussions similaires

  1. erreur lors de l'ouverture fichier pendant la macro
    Par dwarf17 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 20/08/2010, 11h37
  2. Réponses: 1
    Dernier message: 27/02/2008, 16h49
  3. Pb gestion erreur lors ouverture fichier excel
    Par titeelo dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 01/08/2007, 16h47
  4. erreur lors de l'ouverture d'un fichier
    Par programaniac dans le forum Langage
    Réponses: 3
    Dernier message: 04/05/2007, 20h12
  5. Réponses: 4
    Dernier message: 12/10/2005, 21h22

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