推 lunworld:大神... 11/18 00:18
我想這才是問題的主因...
雖然老師的範例程式中有#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