精華區beta EE_DSnP 關於我們 聯絡資訊
※ 引述《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