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 :

Matrice avec trois indices


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Inscrit en
    Mai 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 5
    Par défaut Matrice avec trois indices
    Bonjour,

    Je souhaite utiliser des matrices avec trois indices, voici comment je leur alloue de la memoire:
    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
     
    float ***mat3dyn(int nlines, int nrows, int depth)
    {
    int i,j;
    float ***mat3;
     
    mat3=malloc(nlines*sizeof(float **));
    if(mat3==NULL)
        {
        printf("Error in matrix allocation (lines).\n");
        exit(0);
        }
     
    for(i=0;i<nrows;i++)
        {
        mat3[i]=malloc(nrows*sizeof(float *));
        if(mat3[i]==NULL)
            {
            printf("Error in matrix allocation (rows).\n");
            exit(0);
            }
        }
     
    for(i=0;i<nlines;i++)
        for(j=0;j<nrows;j++)
            {
            mat3[i][j]=calloc(depth,sizeof(float));
            if(mat3[i][j]==NULL)
                {
                printf("Error in matrix allocation (depth).\n");
                exit(0);
                }
            }
     
    return(mat3);
    }
    Voici comment je libere la dite memoire:
    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
     
    void freemat3(float ***mat3, int nlines, int nrows)
    {
    int i,j;
     
    for(i=0; i<nlines; i++)
        for(j=0;j<nrows; j++)
            {
            free(mat3[i][j]);
            mat3[i][j]=NULL;
            }
     
    for(i=0;i<nlines;i++)
        {
        free(mat3[i]);
        mat3[i]=NULL;
        }
     
    free(mat3);
    mat3=NULL;
    }


    J'aimerais savoir si c'est bon, mon programme plante et je me demande si cela ne vient pas de la.

    Merci.

  2. #2
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    Dans ton allocation de tes colonnes tu as ceci :
    Cela devrait être :

    Jc

  3. #3
    Membre à l'essai
    Inscrit en
    Mai 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 5
    Par défaut
    Merci! Mais il semblerait que le probleme ne soit pas la (En fait j'ai le meme nombre de lignes et de colonnes).

  4. #4
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par uknico
    Bonjour,

    Je souhaite utiliser des matrices avec trois indices, voici comment je leur alloue de la memoire:
    <...>
    Voici comment je libere la dite memoire:
    <...>
    J'aimerais savoir si c'est bon, mon programme plante et je me demande si cela ne vient pas de la.
    Effectivement ça plante...
    Ceci est correct :
    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
     
    #include <stdlib.h>
    #include <stdio.h>
     
    float ***mat3dyn (int nlines, int nrows, int depth)
    {
       int i, j;
     
       float ***mat3 = malloc (nlines * sizeof *mat3); /* -ed- */
       if (mat3 == NULL)
       {
          printf ("Error in matrix allocation (lines).\n");
          exit (EXIT_FAILURE);      /* -ed- */
       }
     
       for (i = 0; i < nlines; i++) /* -ed- etait nrows */
       {
          mat3[i] = malloc (nrows * sizeof *mat3[i]); /* -ed- */
          if (mat3[i] == NULL)
          {
             printf ("Error in matrix allocation (rows).\n");
             exit (EXIT_FAILURE);   /* -ed- */
          }
       }
     
       for (i = 0; i < nlines; i++)
          for (j = 0; j < nrows; j++)
          {
             mat3[i][j] = calloc (depth, sizeof *mat3[i][j]); /* -ed- */
             if (mat3[i][j] == NULL)
             {
                printf ("Error in matrix allocation (depth).\n");
                exit (EXIT_FAILURE); /* -ed- */
             }
          }
     
       return mat3;
    }
     
    void freemat3 (float ***mat3, int nlines, int nrows)
    {
       int i, j;
     
       for (i = 0; i < nlines; i++)
          for (j = 0; j < nrows; j++)
          {
             free (mat3[i][j]);
             mat3[i][j] = NULL;
          }
     
       for (i = 0; i < nlines; i++)
       {
          free (mat3[i]);
          mat3[i] = NULL;
       }
     
       free (mat3);
       mat3 = NULL;
    }
     
    int main (void)
    {
       int nlines = 4;
       int nrows = 3;
       int depth = 2;
     
       float ***m3 = mat3dyn (nlines, nrows, depth);
     
       if (m3 != NULL)
       {
          freemat3 (m3, nlines, nrows);
       }
     
       return 0;
    }

Discussions similaires

  1. [Turbo Pascal] Déclaration de matrice avec 4 indices
    Par Hammid11 dans le forum Turbo Pascal
    Réponses: 6
    Dernier message: 17/02/2015, 11h56
  2. Déclaration d'une matrice avec Indice const
    Par Delaready dans le forum C
    Réponses: 3
    Dernier message: 31/01/2013, 19h18
  3. [Débutant] Ouvrir trois matrice avec imshow
    Par csdty dans le forum Images
    Réponses: 2
    Dernier message: 22/05/2009, 12h11
  4. Boite de dialogue avec trois choix
    Par Virgile59 dans le forum Access
    Réponses: 4
    Dernier message: 08/11/2005, 13h00
  5. Calculer un inverse de matrice avec boost?
    Par Clad3 dans le forum Bibliothèques
    Réponses: 6
    Dernier message: 02/06/2005, 18h38

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