El siguiente es el código READER-WRITER para mi memoria compartida.
Leer código-
int main(){ int shmid; int *array; int count = 5; int i = 0; key_t key = 12345; shmid = shmget(key, count*sizeof(int), IPC_EXCL); array = shmat(shmid, 0, SHM_RDONLY); for(i=0; i<5; i++) { printf("\n%d---\n", array[i] ); } printf("\nRead to memory succesful--\n"); shmdt((void *) array); return 0; }Escribir código-
int main() { int shmid; int *array; int count = 5; int i = 0; int SizeMem; key_t key = 12345; SizeMem = sizeof(*array)*count; shmid = shmget(key, count*sizeof(int), IPC_CREAT); array = (int *)shmat(shmid, 0, 0); array = malloc(sizeof(int)*count); for(i=0; i<5; i++) { array[i] = i; } for(i=0; i<count; i++) { printf("\n%d---\n", array[i]); } printf("\nWritting to memory succesful--\n"); shmdt((void *) array); return 0; }Después de escribir en la memoria cuando intento leer, la salida son valores basura. ¿Alguien puede explicar qué hice mal? (La salida muestra todos los ceros) Gracias
En la sección de escritura, usó malloc() después de obtener la dirección de memoria compartida, por lo que se sobrescribirá. Deberías eliminar la línea malloc()
En la sección de lectura, el bucle for debería verse así
printf("\n%d---\n", array[i] );En el código de escritura, intenta adjuntar la memoria compartida a la variable de matriz y también en el siguiente paso, asigna lo mismo a una nueva ubicación en el espacio del usuario (montón) llamando a malloc.
Por lo tanto, está perdiendo la ubicación desde donde se encuentra la memoria compartida y está escribiendo en una nueva matriz ubicada por malloc.
array = (int *)shmat(shmid, 0, 0); array = malloc(sizeof(int)*count);Use diferentes punteros si también desea una matriz en el espacio del usuario o elimine esa línea malloc.
La memoria compartida asignará la memoria especificada por usted al crearla. no puede asignarlo más tarde por otros medios.
Su malloc sobrescribe el valor de retorno de shmat aquí. No está escribiendo para compartir memoria sino para la memoria que acaba de mallocear.
array = (int *)shmat(shmid, 0, 0);al eliminar esta línea, su código funciona bien en mi máquina.
matriz = malloc(tamaño(int)*cuenta);