Я пытаюсь выполнить упражнение, выполняемое с помощью системных вызовов, и выделить память для структуры *. Мой код:Использование mmap() вместо malloc()
myStruct * entry = (myStruct *)mmap(0, SIZEOF(myStruct), PROT_READ|PROT_WRITE,
MAP_ANONYMOUS, -1, 0);
Чтобы уточнить, я не могу использовать malloc()
но можно использовать mmap()
. У меня не было никаких проблем с этим в Windows в Netbeans, но теперь я компилирую и запускаю из командной строки в Ubuntu. Я получаю «Ошибка сегментации» каждый раз, когда я пытаюсь получить к нему доступ.
Есть ли причина, по которой это будет работать на одном, а не на другом, и является ли mmap()
действительным способом выделения памяти таким образом? Мое беспокойство заключалось в том, что я собирался выделить большие куски памяти для каждого вызова mmap()
, теперь я просто не могу заставить его работать.
Кроме того, ошибка, возвращаемая моим mmap, равна 22 - Invalid Argument (я сделал некоторое устранение неполадок при написании вопроса, чтобы проверить ошибку в приведенном выше коде). Адрес 0, пользовательская функция SIZEOF()
работает в других аргументах mmap, я использую MAP_ANONYMOUS
, поэтому параметры fd
и offset
должны быть равны -1 и 0 соответственно.
Есть что-то не так с разделами PROT_READ|PROT_WRITE
?
Просто дикая догадка, если вы используете '4096' или' 8192' или какую-то другую силу из двух вместо 'SIZEOF (myStruct)', это работает? –
Я думаю, что ошибка связана с вашим 'SIZEOF()'.и вы должны добавить 'MAP PRIVATE' –
' SIZEOF() 'неверно, фактический элемент пишется' sizeof() 'I.E. в Нижнем регистре. – user3629249