我想创建一个我可以在测试主体中的东西之前粘住的函数,它将耗尽malloc的所有空间(导致将来的分配失败)。问题是,一旦函数完成,一切似乎都会被释放......
{{1}}
当我测试它时退出该函数所以看起来所有的空间都已用完了但是一旦函数完成,我就可以在将来的函数中使用malloc其他东西。
答案 0 :(得分:3)
我不知道使用你的技巧的测试结果是否正确处理绿色/红色,因为内存耗尽。如果你的代码调用malloc来分配内存,你想要测试它。我想你最好用简单的技巧。
#ifdef TEST
# undef malloc
# define malloc(x) (NULL)
#endif
答案 1 :(得分:2)
某些操作系统(如Linux)执行乐观内存分配。这意味着malloc
和家人返回的内存不会立即分配,因此不一定可用。所以即使你要分配100GB的内存malloc
仍然可能会返回非NULL。
在您使用内存之前,实际上不会分配内存。所以要强制它,你应该memset
阻止。
i = malloc(n);
if (i) {
memset(i, 0, n);
n = n + n;
}
答案 2 :(得分:0)
#include <stdlib.h>
#include <stdio.h>
void breakmalloc(void)
{
char *buff = NULL;
int size = 1024;
while (1) {
buff = (char *)malloc(size);
if (buff) {
memset(buff, 1, size); //must use it, or optimized by system
} else {
printf("memory insufficient!");
break;
}
}
}
试试这个