如何限制可用内存以使`malloc()`失败?

时间:2019-02-12 22:21:28

标签: c memory malloc ulimit

我想通过限制可用内存来使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()返回NULL指针?

2 个答案:

答案 0 :(得分:1)

基于文档: 如果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

答案 1 :(得分:1)

1MB的内存限制不足以实现实际的malloc调用。仅在我的Linux系统上,libc是2MB。因此1MB的内存不足以完全加载应用程序甚至无法达到主要功能。

对我来说,使用ulimit -v 5000足以打印malloc(): Cannot allocate memory消息。