※ 引述《timmylin (Noname)》之銘言:
: 標題: Re: [問題] Tiger測試程式的class B
: 時間: Thu Nov 17 20:22:50 2005
:
:
:
: 我想這才是問題的主因...
:
:
: 雖然老師的範例程式中有#define S來強制將class
: 定為4的倍數,但是
:
: MemoryBlock:T* getElm(size_t i) const { return (_begin + i); }
:
: 卻怪怪的,因為+i帶表pointer加上sizeof(T) * i
:
: 造成再宣告一串class B的Object時,相鄰的B只距離1 Byte而非 4 Byte
:
: ex:
: B *pb1 = new B;
: B *pb2 = new B;
:
: result:
: Calling alloc...(1)
: >> ptr = 0x10968577 --
: Calling alloc...(1) | 只相差1 Byte XD
: >> ptr = 0x10968578 --
:
: 結果Recycle時就爆了...
:
: 我改成
:
: T* getElm(size_t i) const {
: char *pcbegin = (char*)_begin;
:
: pcbegin += S * i;
:
: return (T*)(pcbegin);
: }
:
: 不知道對不對....
:
: --
: ※ 發信站: 批踢踢實業坊(ptt.cc)
: ◆ From: 140.112.240.36
謝謝 TimmyLin 同學的指正, 我想你講的沒錯.
T* getElm(size_t) 這樣子寫的確會有問題.
你的方法應該是沒問題的, 只要是能將記憶體位址正確的加上 S*i 就可以了
至於因為我的 reference code 的錯誤所造成大家時間上的損失
在此深感抱歉, 我會延長作業繳交期限三天. 明天上課時公佈.
(這個故事告訴我們只要是程式都會有 bugs 呀...)
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.121.132.241