Allocation dynamique tableau 2 dimension

Fermé
imou222 - Modifié par Chris 94 le 22/04/2014 à 02:00
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 22 avril 2014 à 15:52
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



A voir également:

3 réponses

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 836
22 avril 2014 à 15:52
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
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 836
22 avril 2014 à 11:52
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,
0
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;

}
0