Utilisation de la mémoire partagée avec des masortingces

Je veux créer une masortingce dans un segment de mémoire partagée. Dans mon deuxième programme, je peux lire tailleX , tailleY mais ma masortingce a juste ‘0’ en valeur. Je crée ma masortingce dans ma fonction initialiserSegMem et les valeurs sont ok … comme toujours, j’ai un problème avec les pointeurs …

ma struct mem_share:

 typedef struct mem_partage{ int** carte; int tailleY; int tailleX; }mem_share; mem_share initialiserDonneeMem(grid* g){ mem_share mem_share_carte; int x = g->tailleX; int y = g->tailleY; int i,j; mem_share_carte.carte = malloc(y*sizeof(int*)); for(i=0;i carte; mem_share_carte.tailleY = y; mem_share_carte.tailleX = x; return mem_share_carte; } void initialiserSegMem(mem_share *mem_share_carte){ int shmid,id_memoire,i,j; int test = 100; int *adresse_mem; key_t cle; cle = 9999; /* Creation of the shared memory segment */ if(shmget(cle,(int) sizeof(mem_share) ,IPC_CREAT | IPC_EXCL | 0777)== -1) { printf("Erreur : Segment de mémoire partagée existant"); } /*on attache le segment a notre espace memoire */ id_memoire = shmget(cle,0,0); adresse_mem = shmat(id_memoire,NULL,0); /* les 2premiers int seront les tailles Y et X*/ printf("tailleY %d zzzz",mem_share_carte->tailleY); memcpy(adresse_mem,&mem_share_carte->tailleY,sizeof(int)); adresse_mem+=sizeof(int); memcpy(adresse_mem,&mem_share_carte->tailleX,sizeof(int)); adresse_mem+=sizeof(int); for(i=0;itailleY;i++){ printf("\n"); for(j=0;jtailleX;j++){ memcpy(adresse_mem,&(mem_share_carte->carte[i][j]),sizeof(int)); adresse_mem+=sizeof(int); } } } 

Dans mon deuxième programme, j’essaie de lire les mémoires partagées:

 int shmid,tailleY,tailleX,y,x; int *adresse_mem; key_t cle; /* on recupere la cle du segment */ cle = 9999; if ((shmid = shmget(cle, 0, 0666)) < 0) { perror("shmget"); exit(1); } /* * on attache le segment a notre espace memoire */ if ((adresse_mem = shmat(shmid, NULL, 0)) == (char *) -1) { perror("shmat"); exit(1); } /* * on lit le segment : * - on recupe la taille y * - puis la taille x * - puis la carte */ memcpy(&tailleY,adresse_mem,sizeof(int)); adresse_mem+=sizeof(int); printf("tailleY %d",tailleY); memcpy(&tailleX,adresse_mem,sizeof(int)); printf("tailleX %d",tailleX); adresse_mem+=sizeof(int); int** carte; carte = malloc(tailleY*sizeof(int*)); for(y=0;ytailleX;x++){ memcpy(&carte[y][x],adresse_mem,sizeof(int)); adresse_mem+=sizeof(int); } } /* affichage de la carte */ for(y = 0;y<tailleY;y++){ printf("\n"); for(x = 0;x<tailleX;x++){ printf("%d ",carte[y][x]); } } 

En passant, dans mon premier programme, je dois mettre à jour ma masortingce dans mes mémoires partagées. Puis-je simplement appeler initialiserSegMem avec ma nouvelle masortingce?

Un exemple de code simple. L’enfant et le parent ont partagé un vecteur 2D à l’aide du segment de mémoire partagée System V. sizeElement est utilisé pour l’estimation du décalage lorsque le type de données change. Ici le double est utilisé. Not Error Error on du code retourné par les fonctions

 #include  #include  #include  #include  #include  unsigned int sizeof_dm(int rows, int cols, size_t sizeElement){ size_t size = rows * (sizeof(void *) + (cols * sizeElement)); return size; } void create_index(void **m, int rows, int cols, size_t sizeElement){ int i; size_t sizeRow = cols * sizeElement; m[0] = m+rows; for(i=1; i