我如何为程序运行进行动态分配失败

问题描述 投票:0回答:1

我有一个使用malloc的C程序(也可能是带有new的C ++)。我想测试我的程序并模拟“内存不足”的情况。

我更喜欢在bash或sh shell环境中运行程序,但linux内的任何情况都是可能的。

如何使动态内存分配因程序运行而失败?

c testing out-of-memory dynamic-memory-allocation
1个回答
0
投票

以下代码应该这样做:

#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)。然后,它进入无限循环,以在保持系统人质资源的同时使程序保持活动状态。就像我说的,我不知道您要完成什么,所以我不知道这是否符合您的目的。也许您希望程序在分配失败后死掉,在这种情况下,请删除无限循环。

我在这里说的大部分内容都取决于系统/系统配置,因此请耐心等待。

© www.soinside.com 2019 - 2024. All rights reserved.