Ошибка сегментации (ядро сброшено) при попытке записать целые числа в общую память в C - PullRequest
0 голосов
/ 27 февраля 2019

Я пытаюсь использовать общую память между процессами.Я просто внедряю функции шаг за шагом.Я продолжаю получать ошибку сегментации (ядро сбрасывается), пока пытаюсь что-то записать в него.

int* ms; // Pointer for milliseconds
int* ns; // Pointer for nanoseconds

void checkArgs(int argc, char* argv[]);
void createSharedMem();
void createSharedMem()
{
    int shmid = shmget(KEY, sizeof(int)*128, IPC_CREAT |0666 );
    if(shmid < 0)
        printf("\n Error creating shared memory");
    ms = shmat(shmid, NULL,0);
    ns = shmat(shmid,NULL,0);
    *ms = 0;
    *ns = 0;
}


int main(int argc, char* argv[])
{

    checkArgs(argc,argv);
    createSharedMem();            

    *ms = 1;
    *ns = 1;

    printf("ms : %d ns : %d", *ms,*ns);

}

1 Ответ

0 голосов
/ 27 февраля 2019

Я нашел проблему.Вместо того, чтобы определять ключ с помощью #define KEY и использовать его в shmget (), я использовал key_t для создания ключевой переменной.Это исправило проблему «Неверный аргумент»

Вот обновленный код:

void createSharedMem()
{
    key_t key;
    int shmid = shmget(key, 4096, 0666 | IPC_CREAT);
    if(shmid < 0)
        perror("\n Error creating shared memory");
    ms = shmat(shmid, NULL,0);
    ns = shmat(shmid,NULL,0);
    *ms =0
    *ns=0;
    printf("%d",*ms);
}
...