【发布时间】:2016-10-07 09:32:09
【问题描述】:
如何在 Keil C 中检查 malloc() 是否失败?
unsigned char xdata malloc_mempool [0x100];
void display()
{
unsigned char xdata *ptr;
int a;
init_mempool (&malloc_mempool, sizeof(malloc_mempool));
ptr = malloc(9000000);
if(ptr != 0)
{
a = 7;
free(ptr);
} else {
a = 9;
}
}
如http://www.keil.com/support/man/docs/c51/c51_malloc.htm 中所述 如果没有足够的内存来满足分配请求,malloc 将返回空指针。显然在 8051 中没有那么大的内存。但是 a 的结果总是 7。
【问题讨论】:
-
9000000甚至不适合 int。我不记得在这种情况下编译器应该做什么,但您可能希望将其更改为 int 在您的情况下是 16 位? -
@glglgl,
malloc()接受unsigned int。 -
您的设备实际有多少 RAM?
-
@mingpepe 看
malloc的源码。顺便说一句,在具有 512 字节 RAM 的系统上进行动态内存分配有意义吗? -
"但是 a 的结果总是 7。" --> 也许因为代码对
a没有任何作用,所以a被优化了。 OP 断言a是 7 是基于以未说明的方法读取a。编写打印a值的真实代码。以及ptr的值。