[問題] 在function中使用malloc的scope問題

看板C_and_CPP (C/C++)作者 ( )時間16年前 (2010/03/08 10:28), 編輯推噓5(5014)
留言19則, 5人參與, 最新討論串1/1
想請教一下各位, 關於在Function中使用malloc或realloc宣告記憶體空間的scope問題。 兩個code如下列link, 在function中宣告並且回傳指標給main fuction http://nopaste.csie.org/f28cf 參考板上之前的文章 宣告**arr傳給function 在function中直接修改pointer內的值並且不回傳 http://nopaste.csie.org/3d41d 想請問一下各位, 正常來說在function結束時,變數的scope也應同時結束,除非有另外宣告 那上述的第一種情況,我自己測試的結果是值正確, 但我不確定是否因為在main中pointer的值剛好指向了在foo中的記憶體起始位置, 所以值都正確, 假設回到main之後又使用malloc或是realloc宣告了好幾個記憶體空間, 就有可能會蓋到原先arr所佔用的空間,造成錯誤? 第二種情況我沒測試過, 不過我也想問問是否第二種寫法就沒有scope的問題? 先感謝各位~ -- ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ 國 立 聯 合 大 學 (理工/電資/管理/技術/客家)院所 招生中 National United University ─────────────────────────────────── 首頁 http://www.nuu.edu.tw BBS telnet://uun.twbbs.org -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 121.254.68.71

03/08 10:41, , 1F
基本上兩個用法都是正確, 變數的scope/life cycle與它所
03/08 10:41, 1F

03/08 10:41, , 2F
對應的記憶體空間可用性的存續是要分開來考慮清楚的:)
03/08 10:41, 2F

03/08 10:42, , 3F
arr會被蓋掉 但arr所指向的空間並不會被影響
03/08 10:42, 3F

03/08 10:43, , 4F
1.裡對arr又malloc的話, 會造成memory leak, 會不會錯誤
03/08 10:43, 4F

03/08 10:43, , 5F
要看你程式怎麼寫; realloc只要你沒用錯應該不會錯誤.
03/08 10:43, 5F

03/08 10:44, , 6F
2.只是用另一種方式在sub func做動態配置, 跟第一個一樣
03/08 10:44, 6F

03/08 10:45, , 7F
沒什麼scope問題才對; 兩個方法回到main後幾乎一樣的.
03/08 10:45, 7F

03/08 10:48, , 8F
都是很正常的用法 你已經會用了
03/08 10:48, 8F

03/08 10:50, , 9F
1. 一直呼叫 foo 就會記憶體一直配置又沒free
03/08 10:50, 9F

03/08 10:50, , 10F
回圈跑很大大概就死了 因為沒記憶體
03/08 10:50, 10F

03/08 10:51, , 11F
2.也是一樣, 不過我當初看 realloc 這個 function時
03/08 10:51, 11F

03/08 10:51, , 12F
似乎有一些歷史因素影響 最好不要用
03/08 10:51, 12F

03/08 10:52, , 13F
好像是不見得會配置到更大的記憶體 忘了
03/08 10:52, 13F

03/08 10:52, , 14F
保險一點先看是否已經配置過 先free 再malloc
03/08 10:52, 14F

03/08 13:46, , 15F
第二個例子中的第 17 行寫錯了
03/08 13:46, 15F

03/08 14:04, , 16F
l大眼睛好利orz
03/08 14:04, 16F

03/08 15:28, , 17F
請問正確的寫法是(*arr)[3] = 69; 對嗎?
03/08 15:28, 17F

03/08 23:17, , 18F
03/08 23:17, 18F

03/09 20:08, , 19F
感謝各位:)
03/09 20:08, 19F
文章代碼(AID): #1Bb62mLG (C_and_CPP)
文章代碼(AID): #1Bb62mLG (C_and_CPP)