Allocation dynamique tableau 2 dimension
imou222
-
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
fiddy Messages postés 11069 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
A voir également:
- Allocation dynamique tableau 2 dimension
- Tableau croisé dynamique - Guide
- Tableau word - Guide
- Supercopier 2 - Télécharger - Gestion de fichiers
- Tableau ascii - Guide
- Trier un tableau excel - Guide
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,
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,
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
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;
}