1. 程式人生 > >指標作為區域性變數的注意事項

指標作為區域性變數的注意事項

參見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: 函式返回一個區域性指標
 未完待續