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

How to limit available memory to make `malloc()` fail?

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

根据文档: 在 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

1MB 的内存限制不足以达到实际的 malloc 调用。在我的 linux 系统上,单独的 libc 是 2MB。所以1MB内存不足以完全加载应用程序甚至到达主要功能。

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