Не могу удалить общую память - PullRequest
0 голосов
/ 21 октября 2019

Я успешно сопоставил объект памяти с размером целого числа следующим образом:

shared_var = (int *) mmap(NULL, sizeof(int), PROT_WRITE  | PROT_READ, MAP_SHARED, shmid, 0);

Но когда я пытаюсь удалить его, я либо получаю ошибку для неверного аргумента, когда говорюдлина равна 0, как таковая:

if(munmap(shared_var, 0) == -1){
    perror(NULL);
    printf("Error unmapping memory: %d\n", errno);
    exit(1);
}

, которая печатает:

Недопустимый аргумент

Ошибка при отображении памяти: 22 * ​​1011 *

Или я получаю сегментациюошибка, когда я говорю, что длина - это sizeof (int), как таковой:

if(munmap(shared_var, sizeof(int)) == -1){
    perror(NULL);
    printf("Error unmapping memory: %d\n", errno);
    exit(1);
}

Есть идеи, почему это происходит?

РЕДАКТИРОВАТЬ: shmid пришел из экземпляра создания общей памяти:

if( (shmid = shm_open("/OS",   O_RDWR | O_CREAT ,0700)) == -1){
        printf("Error creating memory\n");
        exit(1);
    }

    if (ftruncate(shmid, sizeof(int)) == -1){
        printf("Error defining size\n");
        exit(1);
    }
...