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. 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,
      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;

        }