我有一个使用malloc
的C程序(也可能是带有new
的C ++)。我想测试我的程序并模拟“内存不足”的情况。
我更喜欢在bash或sh shell环境中运行程序,但linux内的任何情况都是可能的。
如何使动态内存分配因程序运行而失败?
以下代码应该这样做:
#include <stdlib.h>
#include <stdio.h>
#define BLOCK 4096
int main()
{
void* x = NULL;
while (1) {
x = malloc(BLOCK);
if (!x) {
perror("malloc");
break;
}
}
while(1); /* Infinite Loop */
}
这真的很重要,您想要在这里做什么。我运行了上面的代码,并且malloc从未失败。 OOM杀手刚刚杀死了它。如果增加BLOCK
的大小,则会遇到尝试分配过多内存且内核不会杀死它的地步。您应该看到perror
之类的错误消息(来自malloc: Cannot allocate memory
)。然后,它进入无限循环,以在保持系统人质资源的同时使程序保持活动状态。就像我说的,我不知道您要完成什么,所以我不知道这是否符合您的目的。也许您希望程序在分配失败后死掉,在这种情况下,请删除无限循环。
我在这里说的大部分内容都取决于系统/系统配置,因此请耐心等待。