Allocation dynamique tableau 2 dimension

bonsoir,
je veux allouer dynamiquement un tableau de deux dimension déclarer dans une structure. la variable nombrObjPris est dynamiquement alloué . le code est comme suit :

typedef struct {
 
    int **objPris;
    int **objNonPris;
}ind;
 
ind* create_ind()
 
{
    ind *p_ind; int i;
 
 
    assert(dim >= 0);
    assert(nombrObjPris  >=0 );
 
    p_ind = (ind*) chk_malloc(sizeof(ind));
 
    p_ind->objPris = (int **)malloc ( sizeof(int *)  *  dim);
    for (i=0;i<dim;i++)
     {
    p_ind->objPris[i]=(int *)malloc (sizeof(int) * nombrObjPris);
     }
 
    return (p_ind);  }
 
void main ()
{ int i,j; ind *x;
    x=create_ind();
   for(i=0;i<dim;i++)
    for(j=0;j<nombrObjPris;j++)
   {x->objNonPris[i][j]=i+j;}
   printf("%d",nombrObjPris);
}


le code ne m'affiche pas une erreur mais il m'affiche 0 pour le printf. quelqu'un peut m'aider svp

3 réponses

  1. Contributeur
    int nombrObjPris;
    Il vaut mieux éviter les variables globales.
    De plus, la variable est initialisée à 0 et tu ne modifies jamais la valeur. Donc, la suite ne fonctionnera pas.

    Pour info, les casts (int **), etc. devant les malloc sont inutiles en C. Après, tu peux les laisser si tu préfères.

    Et enfin, n'oublie pas les free() aussi.

    Cdlt,
    1. dim est lu d'un fichier et nombrObjPris est inconnue au debut
      chk_malloc est une fonction qui déclare une erreur si l'allocation a échoué.

      j'ai corrigé quelque erreur mais le code ne fonctionne toujours pas
      #include <stdio.h>
      #include <stdlib.h>
      #define DIM 3

      int nombrObjPris;

      typedef struct {

      int **objPris;

      }ind;
      void* chk_malloc(size_t size)
      /* Wrapper function for malloc(). Checks for failed allocations. */
      {
      void *return_value = malloc(size);
      if(return_value == NULL)
      printf("Selector: Out of memory.");
      return (return_value);
      }

      ind* create_ind()
      {
      ind *p_ind; int i;

      p_ind->objPris = (int ** ) chk_malloc (DIM * sizeof (int*));
      for (i=0;i<DIM;i++)
      {
      p_ind->objPris[i]=(int *)chk_malloc(nombrObjPris* sizeof(int));
      }

      }

      int main(void)
      {
      int i, j; ind *p_ind;
      for(i=0;i<DIM;i++)
      for(j=0;j<nombrObjPris;j++)

      {p_ind->objPris[i][j]=i+j; }
      printf("%d \n",p_ind->objPris[i][j]);
      return 0;

      }
      1. Contributeur
        Bonjour,

        Comment est défini nombrObjPris ? et dim ?

        void main ()
        Le bon prototype est int main(void)
        Et il ne faut pas oublier : return 0; en fin de main.

        chk_malloc()
        Fonction non standard. Pourquoi ne pas utiliser malloc() ?

        <ital>printf("%d",nombrObjPris);<ital>
        N'oublie pas de mettre un '\n' pour forcer l'affichage.

        Cdlt,