作者dream1203 (小叮噹)
看板EE_DSnP
標題[討論] Dynamic Array的記憶體問題
時間Thu Dec 1 17:08:25 2011
因為作業中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
1F:→ dream1203:我知道第一個問題了…XD 挺蠢的哈哈 12/01 17:41
2F:→ shryuhuai:T有定義destructor的話就會存大小,沒有的話就不會存 12/01 23:45
3F:→ shryuhuai:不過既然是template當作沒有存比較保險吧 12/01 23:46
4F:推 ric2k1:你如果是用 new 來 allocate _data,系統自然會給他適當大小 12/02 00:27
5F:→ ric2k1:的記憶體 12/02 00:27
6F:→ dream1203:完全理解了! 感謝二樓和老師! 12/02 00:59
7F:→ dream1203:對了 其實我一直想問 如果沒有定義destructor的話 系統 12/02 01:03
8F:→ dream1203:就真的不存array大小了嗎? 如果是的話他怎麼delete? 12/02 01:03
9F:→ dream1203:如果不是的話… 他是藏到哪去了呢QQ 12/02 01:03
10F:→ shryuhuai:我猜是真的沒有了,我的理解是在c++上不會知道記憶體大小 12/02 09:22
11F:→ shryuhuai:在c上面就一直都知道,void* p =malloc(1000); free(p); 12/02 09:23
12F:→ shryuhuai:似乎清除記憶體的時候就會自動知道大小了 12/02 09:27
13F:→ shryuhuai:存size是為了知道在清除記憶體前,要呼叫幾次destructor 12/02 09:29
14F:→ shryuhuai:因為destructor是c++的東西,不知道記憶體大小,要額外記 12/02 09:30
15F:→ shryuhuai:最後清除記憶體系統內只要用c的方法就可以清除了 12/02 09:31
16F:→ dream1203:所以說~ 在heap裡面allocate的記憶體大小是有被存起來的 12/05 00:59
17F:→ dream1203:只是array大小沒被存(因為沒destructor就不用存這東西) 12/05 00:59