c - 如何限制可用内存以使“malloc()”失败



我想通过限制可用内存来使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("%pn", ptr);
    free(ptr);
    return 0;
}

编辑:以上是在Mac OS X上。

在Linux上,我遇到了分段错误。为什么malloc()会导致分段错误?如何使malloc()返回空指针?

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

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

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

相关内容

  • 没有找到相关文章

最新更新