【发布时间】:2015-12-09 00:20:56
【问题描述】:
我正在尝试使用 malloc() 函数为链接列表创建节点。在我的例子中,该函数在以下虚拟代码段上返回 NULL。
我在 atmega 2561 上运行 FREERTOS。
if (!malloc(sizeof(struct Event))
{
//The code gets inside here
} else {
//
}
节点的结构如下:
struct Event
{
uint8_t shouldCarBrake;
uint16_t tachoPoint;
struct Event *next;
};
【问题讨论】:
-
我不知道 atmega2561。你知道你是否有足够的内存吗?
-
是的,我已经检查过了
-
这一行:
if (!malloc(sizeof(struct Event))最好写成:if (NULL == (ptr = malloc(sizeof(struct Event)) ) )事实上,没有设置指针变量,所以发布的代码会导致内存泄漏,因为(不存在) 指针变量不能传递给free(0 -
@John :如何检查?该信息可能应该在问题中。这不仅仅是拥有空闲内存的问题。该内存必须分配给堆,并且堆本身必须有一个连续的内存块来满足分配请求(即,即使累积起来有足够的内存,也不能太碎片化而无法分配)。
标签: c embedded avr atmel freertos