如何在 C 语言中测试恶意故障?



我用C写了一些代码,我需要处理无法malloc()realloc()的情况。我知道如果内存分配失败,它将返回NULL,我写了如下内容:

char *str = (char *)malloc(sizeof(char));
if (str == NULL)
{
puts("Malloc Failed.");
// do something
}
// do something else

所以问题是,我如何测试这部分代码?

手动耗尽我机器上的内存是不可能的。所以我想限制它可以使用的最大内存大小。

我可以指定程序在编译/运行时可以使用的最大内存大小吗?还是有什么技术可以做到这一点?

供您参考,我用标准C编写代码,用gcc编译,并在Linux环境中运行。

提前非常感谢。

您可以创建一个基本上覆盖malloc的测试文件。

首先,使用宏将malloc重新定义为存根函数,例如my_malloc。 然后包括要测试的源文件。 这会导致对malloc调用替换为可以返回所需内容的my_malloc。 然后,您可以调用函数进行测试。

#include <stdio.h>
#include <stdlib.h>
#define malloc(x) my_malloc(x)
#include "file_to_test.c"
#undef malloc
int m_null;
void *my_malloc(size_t n)
{
return m_null ? NULL : malloc(n);
}
int main()
{
// test null case
m_null = 1;
function_to_test();
// test non-null case
m_null = 0;
function_to_test();
return 0;
}

您可以简单地给 malloc 一个大数字来分配,它将无法分配您尝试的大小。

最新更新