Как ограничить доступную память для сбоя `malloc ()`? - PullRequest
0 голосов
/ 13 февраля 2019

Я бы хотел, чтобы malloc() не работал, ограничивая доступную память.

$ ulimit -v 1000
$ ./main.exe 10000000
0x102bfb000

Но даже при использовании ulimit следующая программа по-прежнему корректно завершается.Кто-нибудь знает, как заставить malloc() терпеть неудачу?Спасибо.

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[]) {
    size_t size = atoi(argv[1]);
    void *ptr = NULL;

    if((ptr = malloc(size)) == NULL) {
        perror("malloc()");
        exit(1);
    }

    printf("%p\n", ptr);
    free(ptr);
    return 0;
}

РЕДАКТИРОВАТЬ: выше, на Mac OS X.

В Linux, я получил ошибку сегментации.Почему malloc() может вызвать ошибку сегментации?Как заставить malloc() возвращать нулевой указатель?

1 Ответ

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

На основании документации: В случае, когда ptr является нулевым указателем, функция ведет себя как malloc , присваивая новый блок байтов размера и возвращая указатель на его начало

Если выВы хотите ограничить память, которую может выделить программа, которую вы можете использовать:

#include <sys/time.h>
#include <sys/resource.h>
rlimit l;
getrlimit(RLIMIT_AS, &l);
l.rlim_cur = 1000;
setrlimit(RLIMIT_AS, &l);

http://man7.org/linux/man-pages/man2/setrlimit.2.html

...