Как запретить пользователю использовать нераспределенную память в реализации malloc во время выполнения в C? - PullRequest
0 голосов
/ 12 мая 2019

Я пытаюсь реализовать ownmalloc(), вызывая оригинал malloc() только один раз в начале кода.

Используя эту память, возвращаемую исходным malloc(), каждый вызов ownmalloc() из пользовательской программы использует эту память для выделения.

Имеется 2 списка, выделенных и нераспределенных.

ownfree() функция удаляет выделенную память и добавляет обратно в нераспределенные блоки, упорядочивает их и делает смежные блоки адресов единым блоком

У меня два вопроса:

  1. Как я могу запретить пользователю использовать неавторизованную память во время выполнения, например, пользователь запросил 10 блоков и использует 13 блоков для записи данных.

  2. ownmalloc() вызывает функцию (скажем, x), которая, в свою очередь, вызывает исходный malloc() и занимает блок памяти, который будет использоваться ownmalloc() несколько раз. Как я могу убедиться, что ownmalloc() вызывает эту функцию x() только один раз (во время первого вызова), а при последующих вызовах не следует выполнять вызов функции x().

Я попробовал это с этим подходом, но он не работает в c

typedef struct mem{
    int sz;
    struct mem *next;
}node;

node *block;
static bool init=false;

void* x(){
    //call to original malloc
}

void* ownmalloc(size){
    if(!init){
        block=x();
        init=true;
    }
}

Всякий раз, когда я пытаюсь позвонить в эту функцию, ownmalloc() x() вызывается каждый раз. Как мне сделать так, чтобы он звонил только один раз?

1 Ответ

0 голосов
/ 12 мая 2019

Попробуйте получить входные данные от пользователя в статическую распределенную структуру данных и проверить их размер.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...