Tableau 2 dimension 1 dimension connue et l'autre inconnue

Tableau 2 dimension 1 dimension connue et l'autre inconnue - C - Programmation

Marsh Posté le 22-04-2014 à 02:08:29    

bonsoir ,
je veux crée un tableau a deux dimension dont une dimension est connue dim et l'autre non nombrObjPris.
 
j'ai fait ceci :

Code :
  1. typedef struct {
  2.     int **objPris;
  3. }ind;
  4. int nombrObjPris;
  5. p_ind->objPris = (int ** ) chk_malloc (dim * sizeof (int));
  6. for (i=0;i<dim;i++)
  7. {
  8. p_ind->objPris[i]=(int *)chk_malloc(nombrObjPris* sizeof(int));
  9. }
  10. for(i=0;i<dim;i++)
  11.     for(j=0;j<nombrObjNonPris;j++)
  12.    {x->objNonPris[i][j]=i+j; printf("%d \n",x->objNonPris[i][j]);}

 
 
le code m'affiche pas une erreur mais il ne fonctionne pas. help plz


Message édité par imou222 le 22-04-2014 à 02:11:00
Reply

Marsh Posté le 22-04-2014 à 02:08:29   

Reply

Marsh Posté le 22-04-2014 à 06:03:36    

Bonjour !
 
La première allocation est incorrecte (mais l'erreur risque de ne se manifester qu'en 64 bits) : le tableau p_ind->objPris est un tableau de (int *), la ligne devrait donc être

Code :
  1. p_ind->objPris = (int ** ) chk_malloc (dim * sizeof (int *));


 
Bonne continuation !


Message édité par Farian le 22-04-2014 à 06:04:14
Reply

Marsh Posté le 22-04-2014 à 15:40:24    

j'ai corriger les erreurs mais le code ne fonctionne pas :pt1cable:  
 

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define DIM 3
  4. int nombrObjPris;
  5. typedef struct {
  6.     int **objPris;
  7. }ind;
  8. void* chk_malloc(size_t size)
  9. /* Wrapper function for malloc(). Checks for failed allocations. */
  10. {
  11.     void *return_value = malloc(size);
  12.     if(return_value == NULL)
  13. printf("Selector: Out of memory." );
  14.     return (return_value);
  15. }
  16. ind* create_ind()
  17. {
  18.     ind *p_ind; int i;
  19. p_ind->objPris = (int ** ) chk_malloc (DIM * sizeof (int*));
  20. for (i=0;i<DIM;i++)
  21. {
  22. p_ind->objPris[i]=(int *)chk_malloc(nombrObjPris* sizeof(int));
  23. }
  24. }
  25. int main(void)
  26. {
  27. int i, j; ind *p_ind;
  28. for(i=0;i<DIM;i++)
  29.     for(j=0;j<nombrObjPris;j++)
  30.    {p_ind->objPris[i][j]=i+j; }
  31. printf("%d \n",p_ind->objPris[i][j]);
  32. return 0;
  33. }


Message édité par imou222 le 22-04-2014 à 15:40:59
Reply

Marsh Posté le 22-04-2014 à 16:23:31    

Le "printf" de la ligne 44 est en dehors des boucle "for" donc utilise pour u la valeur DIM et pour j la valeur nombrObjPris, ce qui provoque une lecture en dehors de l'espace qui a été alloué, et peut générer une erreur de segmentation (valgrind vous l'aurait dit :) )
 
Bonne continuation !

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed