【发布时间】:2019-02-12 22:21:27
【问题描述】:
我想通过限制可用内存使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指针?
【问题讨论】:
-
你想要 -m 不是吗? -v 只是限制虚拟内存
-
ulimit -Sm 1仍然不会对realloc()造成任何问题。 -
你在什么操作系统上使用什么外壳?如果我在 Linux 4.15 上对 dash、bash 和 fish 执行
ulimit -v 1操作,几乎任何东西都会因为分配失败而中断,甚至在设法启动程序之前。对于其余的ulimit -v具有较大值的工作在我的机器上按预期工作 - 请记住,ulimit -v以 KiB 为单位,而您的程序以字节为单位。 -
我在 Mac OS X 上使用 bash。当调用
ulimit -v 1时,没有任何中断。我不确定出了什么问题。