[問題] 關於指標的問題

看板C_and_CPP作者 (Legendre)時間10年前 (2014/05/23 10:58), 編輯推噓1(108)
留言9則, 4人參與, 最新討論串3/3 (看更多)
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) GCC 問題(Question): 最近上課遇到了點問題,是關於指標的 我們課堂上使用指標來模擬矩陣、向量 使用方式大概是這樣: //向量 double *vec=new double [N]; //矩陣 double **mat; mat=new double *[N]; for (int i=0;i<N;i++) mat[i]=new double [N]; 而矩陣相加老師給的code長這樣 double **mat_add_mat(int i, double **a, double **b) { int k, k1; double **temp; temp = new double *[i]; for(k=0;k<i;k++) { temp[k] = new double [i]; } for(k=0;k<i;k++) { for(k1=0;k1<i;k1++) { temp[k][k1] = a[k][k1] + b[k][k1]; } } return temp; } 在函式中 new 一個雙重指標,並回傳之 使用方式大概如下 double **A double **B double **C .....(分別給值) C=mat_add_mat(N,A,B) 我對這行的理解是把C這個指標所指向的位址改變成 mat_add_mat 中temp的位址 這裡我有個小疑問,那就是C這個指標原先所指向的記憶體是會自己free掉,還是就這樣 晾在一旁了? 如果不會自動歸還,那做出for i in range(100) C++A 這種操作 mat_add_mat這個函式不就會一直 new 記憶體出來而不會歸還了嗎? 如果沒辦法自動歸還記憶體,那有什麼方法可以改善這個情況呢? -- 作者 hgfck (hgf@NCKU) 看板 Gossiping 標題 Re: [新聞] 成大學生會做民調 九成學生支持多元成家 時間 Sun Nov 24 14:02:34 2013

11/24 14:07,
成大學生將近2萬2千人 什麼1萬多?http://ppt.cc/xnuO
11/24 14:07

11/24 14:07,
22K是包含研究生
11/24 14:07
-- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 115.81.52.21 ※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1400813921.A.CEA.html

05/23 11:03, , 1F
c 不會自動歸還,你要自己清掉
05/23 11:03, 1F

05/23 11:03, , 2F
你一直執行 mat_add_mat 確實會一直new新的出來
05/23 11:03, 2F

05/23 11:04, , 3F
這就是 c 需要自己管理記憶體的問題了
05/23 11:04, 3F

05/23 11:05, , 4F
你自己保證使用 mat_add_mat 之前 c 是沒東西的就好
05/23 11:05, 4F

05/23 11:07, , 5F
會自動回收的機制叫做 garbage collection
05/23 11:07, 5F

05/23 11:07, , 6F
c 裡面沒有這種機制
05/23 11:07, 6F

05/23 11:11, , 7F
C++11有了
05/23 11:11, 7F

05/23 18:37, , 8F
寫一個release函式
05/23 18:37, 8F

05/23 20:17, , 9F
C++沒有GC。smart pointers是RAII的應用
05/23 20:17, 9F
文章代碼(AID): #1JVhbXpg (C_and_CPP)
文章代碼(AID): #1JVhbXpg (C_and_CPP)