關於子函式變數生命週期以及指標的一些問題

2021-07-05 08:05:27 字數 620 閱讀 6069

c語言的變數都有自己的生存週期,如果超過這個週期,那麼它所占用的位址空間就會被釋放掉。不再受到保護。因此主函式中要用到的變數不能在子函式裡面申明。

即便是使用了指標的方式仍然不能保證程式能夠將變數準確的在主函式當中被使用。

下面用一些真實的**來說明:

#include #include typedef struct _nodenode,*pnode;

void test (node *head)

int main()

上面這段**偶爾能正成執行,顯示出我們想要的結果,大多數的時候不能夠得到我們想要的結果。這是因為子函式裡面申請的變數在子函式退出的時候就自動釋放掉空間(這裡說的釋放空間,並不是說改變該記憶體區域內的值,而是解除對該區域的占用,系統可以將該區域分配給別的需要使用記憶體的**段。)如果系統沒有將該區域重新分配出去,那麼這個程式就能正常的執行,如果被分配出去了,就可能輸出一些亂碼。又或者,該區域被分配成一塊受保護的區域,那麼程式執行的時候就會報錯。

如果要對原程式改進,可以有如下的方式:在子函式當中用malloc函式申請一塊受保護的空間,再把申明的變數放在該空間內,這樣在子程式退出的時候就不會釋放空間。程式就能正常的執行,得到我們想要的結果。

生命週期鉤子函式

指的是 vue 在被使用的時候,或者說在被建立開始到被銷毀的整個過程,程式提前預設在 vue 當中的一些函式會在什麼時候做的自動觸發。生命週期 指的是 vue 從建立 到使用 到結束。鉤子函式 指的是埋在 vue 身上的一些函式,在某些階段去執行。例項在不同階段,自動觸發的事件 beforecrea...

生命週期鉤子函式

1.建立時期 beforecreated 這個階段表示例項完全被建立出來之前,會執行它,注意 在beforecreated生命週期函式執行的時候,data和methods中的資料都還沒有初始化,現在輸不出data和methods中的資料。created鉤子函式 在created中,data和meth...

生命週期鉤子函式

元件宣告週期有四個過程 建立 掛載 更新 銷毀 這四個過程對應的有八個鉤子函式 beforecreate created beforemount mounted beforeupdate updated beforedestroy destroyed 我們一般會把資料請求放在created 有些人會...