我用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 一个大数字来分配,它将无法分配您尝试的大小。