Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

166
Views
Leer escribir matriz de enteros en la memoria compartida

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

over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

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] );
over 4 years ago · Santiago Trujillo Report

0

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.

over 4 years ago · Santiago Trujillo Report

0

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);

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!