Allocation dynamique tableau 2 dimension
imou222
-
fiddy Messages postés 441 Date d'inscription Statut Contributeur Dernière intervention -
fiddy Messages postés 441 Date d'inscription Statut Contributeur Dernière intervention -
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 :
le code ne m'affiche pas une erreur mais il m'affiche 0 pour le printf. quelqu'un peut m'aider svp
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
-
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, -
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, -
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;
}