【問題一】:在子函式中動態分配記憶體: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 被呼叫了,建構函式應該是用來例項化物件的吧,而抽象...