指標作為區域性變數的注意事項
阿新 • • 發佈:2019-01-22
參見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: 函式返回一個區域性指標
未完待續