参见http://www.cnblogs.com/stoneJin/archive/2011/09/21/2183962.html所述。
#include <stdio.h> //此函数中d也是个局部变量,函数执行完自动销毁,但是指针分配的空间不会被自动回收,除非程序员delete掉。 //所以这个可以正常输出。 char *a() { char *d = "ZET";//这个初始化的一种形式,相当于分配了四个空间 return d; }
因此类似的,在FreeRTOS中,如果有把指针作为局部变量,使用完指针以后,必须把指针释放掉。这里使用FreeRTOS自带的vPortFree函数。
void Function1(void)
{
uint8_t * pa ;
//here start to use pa //
...
//here end to use pa //
vPortFree( pa );
}
另外在指针声明时,必须以下情况:
情形1:局部变量指针没有赋初值.
《C Primer Plus》的Chapter 10.5 里面有类似的例子,还有以下描述(P298):“切记:创建一个指针时,系统只分配了存储指针本身的内存,并未分配存储数据的内存。因为,在使用指针之前,必须先用已分配的地址初始化它”。
void function1(void)
{
uint8_t *pa ;
*pa = 8 ; //这样没有赋初值是错误的
}
正确的做法应该是
void function1(void)
{
uint8_t *pa ;
uint8_t a = 8 ;
pa = &a ;
}
情形2: 函数返回一个局部指针
未完待续