求教關於被調函式中的malloc與free

2021-06-26 10:03:59 字數 925 閱讀 3425

【問題一】:在子函式中動態分配記憶體:p=(int*)malloc(a*sizeof(int)),這個函式的目的是返回p:return(p)

我想問問,該在什麼地方進行free(p)呢?如果在子函式中的return前free是肯定不行的,在之後free?子函式的return之後,不就結束函式呼叫了嗎?那時候free還會被子函式執行嗎?

【解答一】:

呃,這個在所分配的記憶體不需要的時候free,

因為你返回的時候這段記憶體還需要使用,所以在當前函式中不free

【解答二】:

malloc是在堆上分配的空間  不會隨函式結束而消失,

自己申請的要自己釋放,這就是動態申請。

還有不能釋放倆次free(p)後  一定要把p = null; 

不然容易再釋放一次  那就會出異常了

【問題二】:

謝謝樓上諸位,我知道malloc是在堆上分配的記憶體,不會隨函式呼叫結束而自動釋放,問題是如果在被調函式中釋放,釋放位置無非兩個:return前或return後,return前釋放是不可能了,不然我這函式白寫了,還沒傳遞給正主呢,自己先被乾掉了,return後更不可能了,函式見了return就結束了,後面再寫多少行都白寫

可也不能在主函式中釋放啊 我試了試,編譯器報錯說我釋放的東西是未定義的,這是意料之中的

咋辦呢?真是迷茫了

【解答】:

你傳給函式的時候,在函式體外傳的應該是雙指標,否則這塊記憶體是返回不了的。或者用函式返回值來傳遞動態記憶體

方法一:雙指標

void getmemory(char ** p, int num)

int main()

方法二:用return

char * getmemory(int num)

int main()

指標與引用在主調函式和被調函式中的應用

初始化順序線性表 status initlist linklist l 初始條件 順序線性表l已存在,1 i listlength l 操作結果 用e返回l中第i個資料元素的值 status getelem linklist l,int i,elemtype e if p j i return er...

c語言中的主調函式與被調函式

被呼叫的函式為被調函式,呼叫該函式的函式為主調函式。這樣說可能讓人一臉懵逼 舉例 main int max float x,float y 其中main 是主調函式,因為其中 c max a,b 呼叫了 被調函式 max。主調函式與背調函式是成對出現的,是主動和被動的關係,現在有a b兩個函式,a函...

為什麼抽象類中的建構函式可以被繼承並被呼叫?

namespace public a public class b a public b public class program 輸出 static b static a normal a normal b 抽象類a中的建構函式 public a 被呼叫了,建構函式應該是用來例項化物件的吧,而抽象...