Ошибка сегментации при хранении массива в Linux IPC - PullRequest
0 голосов
/ 05 марта 2019

Я пытаюсь сохранить массив в общем из процесса и пытаюсь получить доступ к нему из другого процесса.

Ниже приведен код, который я использую для хранения массива

#include <iostream> 
    #include <sys/ipc.h> 
    #include <sys/shm.h> 
    #include <stdio.h> 
    #include <stdlib.h>

    using namespace std; 
    int count;
    int main() 
    {

      while(1)
    {
     int arr[5] = {1,2,3,4,5}; 
     int *str1;

     int key=5678;
     // shmget returns an identifier in shmid 
     int shmid = shmget(key,1024, 0666|IPC_CREAT); 
     printf("\nShared Memory Id = %d\n",shmid);

     // shmat to attach to shared memory 
     str1 = (int*) shmat(shmid,(void*)0,0);
     for(int i=0;i<5;i++)
        {
         *str1=arr[i];
          printf("Data written in memory: %d\n",*str1);
          str1++;
        }
    }
    shmdt((void*)str);
    return 0; 
    }

Когда я запускаю программу, она запускается до некоторой степени и выдает ошибку как ошибку сегментации (сброшено ядро) и получает выход из приложения.

Пожалуйста, помогите мне решить эту проблему.

Спасибо и всего наилучшего, Прабхакар М

1 Ответ

0 голосов
/ 12 марта 2019

str1 ++ является виновником.Ниже код работает.

    #include <iostream> 
    #include <sys/ipc.h> 
    #include <sys/shm.h> 
    #include <stdio.h> 
    #include <stdlib.h>

    using namespace std; 
    int count;
    int main() 
    {
 int arr[5] = {1,2,3,4,5}; 
     int *str1;

     int key=5678;
     // shmget returns an identifier in shmid 
     int shmid = shmget(key,1024, 0666|IPC_CREAT); 
     printf("\nShared Memory Id = %d\n",shmid);

     // shmat to attach to shared memory 
     str1 = (int*) shmat(shmid,(void*)0,0);
     int *copyAdrr;
     copyAdrr = str1 ;
     while(1)
    {

     for(int i=0;i<5;i++)
        {
         *str1=arr[i];
          printf("Data written in memory: %d\n",*str1);
          str1++;
        }
        str1 =copyAdrr;
    }
    shmdt((void*)str);
    return 0; 
    }
...