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 :

Programme qui se bloque


Sujet :

C

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Mars 2009
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 24
    Points : 0
    Points
    0
    Par défaut Programme qui se bloque
    voici une partie de mon code quand je l'exécute le programme se bloque, je crois qu'il s'agit d'un problème d'allocation de mémoire mais je crois que je bien alloue la mémoire. svp une petite aide, je sais que c'est pas compliqué.

    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
     
    #include <stdio.h>
    #include <stdlib.h>
    typedef struct
    {
        char num;
        int flag;
    }shiki;
     
    shiki **load_dati(char *, int *);
     
    int main()
    {
        shiki **t;
        int n;
        t=load_dati("iniziale.txt",&n);
     
        printf("Hello world!\n");
        return 0;
    }
     
    shiki ** load_dati(char *filename, int *n)
    {
        shiki **t;
        int num,i,j=0;
        char c1;
        FILE *f;
        if((f=fopen("iniziale.txt","r"))==NULL)
        {
            printf("errore apertura");
            exit(EXIT_FAILURE);
        }
        fscanf(f,"%d",&num);
        *n=num;
        t = (shiki **) malloc ((2*num-1) * sizeof (shiki *));
        if (t == NULL)
        {
            printf("Memory allocation error.\n");
            exit(EXIT_FAILURE);
        }
     
        for (i=0; i < 2*num-1; i++)
        {
            t[i] = (shiki *) malloc ((2*num-1) * sizeof (shiki));
            if (t[i] == NULL)
            {
                printf("Memory allocation error.\n");
                exit(EXIT_FAILURE);
            }
        }
        i=0;
        while(fscanf(f,"%c",&c1)!=EOF)
        {
            if(c1!='\n' && c1!=' ')
            {
                t[i][j].num=c1;
                j++;
            }
            if(c1=='\n')
            {
                j=0;
                i++;
            }
     
        }
        return t;
     
    }
    le fichier texte iniziale.txt a la forme suivante:
    5
    0 | 0 | 0 | 0 | 0
    - - - - v - - - -
    0 > 0 | 0 | 0 | 3
    - - - - - - - - -
    0 | 0 < 2 | 0 | 0
    - - - - v - - - -
    0 | 0 | 0 | 0 | 4
    ^ - v - - - - - -
    0 | 0 | 0 | 0 | 0

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 899
    Points : 219 806
    Points
    219 806
    Billets dans le blog
    125
    Par défaut
    Bonjour,

    Je vous conseille d'utiliser un débogueur pour suivre le comportement de votre programme.
    Sinon, vous avez des fuites de mémoire ! Vous n'avez aucune désallocation (free()) correspondant à vos malloc().

  3. #3
    Expert éminent sénior
    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
    Points : 13 926
    Points
    13 926
    Par défaut
    Cela vient de la lecture du nombre de la première ligne :
    Le fscanf(f,"%d",&num); va laisser dans le buffer d'entrée le caractère de fin de ligne. Du coup, on a une incrémentation intempestive de i et on va dépasser la zone allouée.

    Il faut purger le buffer d'entrée après la lecture de la première ligne. Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fscanf(f,"%d%*[^\n]%*c",&num);

Discussions similaires

  1. pthread : programme qui se bloque
    Par code_vx dans le forum POSIX
    Réponses: 1
    Dernier message: 14/08/2013, 08h50
  2. Programme qui bloque
    Par zehle dans le forum Windows Forms
    Réponses: 4
    Dernier message: 30/01/2009, 17h13
  3. Réponses: 4
    Dernier message: 04/01/2008, 11h44
  4. Programme qui bloque avec fonction sort
    Par ultimate_manx dans le forum SL & STL
    Réponses: 10
    Dernier message: 29/11/2007, 20h06
  5. Réponses: 12
    Dernier message: 21/02/2006, 11h47

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