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

172
Views
Read Write Integer Array Into Shared Memory

The following is the READER-WRITER code for my shared memory.

Read Code-

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

Write Code-

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

After writing to the memory when I try to read, the output are garbage values. Can someone please explain what I have done wrong(The output shows all zeros) Thankyou

over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

In the write section, you used malloc() after getting share memory address, so it will be overwritten. You should remove the malloc() line

In the read section, the for loop should look like this

printf("\n%d---\n", array[i] );
over 4 years ago · Santiago Trujillo Report

0

In write code your trying to attach the shared memory to array variable and also in next step u assigning the same to new location in user space (heap) by calling malloc.

So you are loosing the the location from where is the shared memory and writing into new array loacated by malloc.

array = (int *)shmat(shmid, 0, 0);
array = malloc(sizeof(int)*count);

Use different pointers if you want an array in user space also or remove the that malloc line.

Shared memory will allocate the memory specified by you while creating it. you cant allocate it later by other means.

over 4 years ago · Santiago Trujillo Report

0

Your malloc overwrites shmat's return value here.You are not writing to share memory but to the memory you just malloced.

array = (int *)shmat(shmid, 0, 0);

by delete this line.your code runs ok on my machine.

array = malloc(sizeof(int)*count);

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!