[討論] Dynamic Array的記憶體問題

看板EE_DSnP作者 (小叮噹)時間12年前 (2011/12/01 17:08), 編輯推噓1(1016)
留言17則, 3人參與, 最新討論串1/1
因為作業中implement Array的方法是 先new一個T* _data的位子 然後直接往下拿_data[i] 我想問的是:這樣會不會不小心拿到別人的data呢? 例如說_data = 0x20 (為方便,假設heap memory只有256 bytes) 同時有另外一個static array的頭在0x30好了 這樣_data[4]就等於0x30了… 豈不慘案否QQ 是說系統不會讓這種事情發生嗎? 還是我完全理解錯誤了呢QQ 另外還有一個問題是… 我爬了一下文 似乎Dynamic Array在使用時 系統也會幫我們存他的大小? 是否真有此事呢QQ 感謝! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.246.85

12/01 17:41, , 1F
我知道第一個問題了…XD 挺蠢的哈哈
12/01 17:41, 1F

12/01 23:45, , 2F
T有定義destructor的話就會存大小,沒有的話就不會存
12/01 23:45, 2F

12/01 23:46, , 3F
不過既然是template當作沒有存比較保險吧
12/01 23:46, 3F

12/02 00:27, , 4F
你如果是用 new 來 allocate _data,系統自然會給他適當大小
12/02 00:27, 4F

12/02 00:27, , 5F
的記憶體
12/02 00:27, 5F

12/02 00:59, , 6F
完全理解了! 感謝二樓和老師!
12/02 00:59, 6F

12/02 01:03, , 7F
對了 其實我一直想問 如果沒有定義destructor的話 系統
12/02 01:03, 7F

12/02 01:03, , 8F
就真的不存array大小了嗎? 如果是的話他怎麼delete?
12/02 01:03, 8F

12/02 01:03, , 9F
如果不是的話… 他是藏到哪去了呢QQ
12/02 01:03, 9F

12/02 09:22, , 10F
我猜是真的沒有了,我的理解是在c++上不會知道記憶體大小
12/02 09:22, 10F

12/02 09:23, , 11F
在c上面就一直都知道,void* p =malloc(1000); free(p);
12/02 09:23, 11F

12/02 09:27, , 12F
似乎清除記憶體的時候就會自動知道大小了
12/02 09:27, 12F

12/02 09:29, , 13F
存size是為了知道在清除記憶體前,要呼叫幾次destructor
12/02 09:29, 13F

12/02 09:30, , 14F
因為destructor是c++的東西,不知道記憶體大小,要額外記
12/02 09:30, 14F

12/02 09:31, , 15F
最後清除記憶體系統內只要用c的方法就可以清除了
12/02 09:31, 15F

12/05 00:59, , 16F
所以說~ 在heap裡面allocate的記憶體大小是有被存起來的
12/05 00:59, 16F

12/05 00:59, , 17F
只是array大小沒被存(因為沒destructor就不用存這東西)
12/05 00:59, 17F
文章代碼(AID): #1ErqGCBn (EE_DSnP)