精華區beta EE_DSnP 關於我們 聯絡資訊
※ 引述《geniusjazz (我個版開了!快來!)》之銘言: : 標題: [問題] 一些小問題 : 時間: Sun Dec 17 04:13:10 2006 : : 就是老師的 ./memTest 好像有點問題耶, : 但是 ./memTest.debug 就沒問題。 : : 兩個都輸入mtr 50 : mtn 5 -a 30 : : 可是前者會出現奇怪的狀況: : mtp : ========================================= : = Memory Manager = : ========================================= : * Block size : 50 Bytes : * Number of blocks : 6 : * Free mem in last block: 50 : * Recycle list : : [ 3] = 5 : ========================================= : = class MemTest = : ========================================= : Object list --- : : Array list --- : ooooo : : 完全不理解怎麼會變這樣... : : 可是./memTest.debug打入一樣的東西 : : 才會出現比較合理的結果。 : : Calling allocArr...(364) : Calling MemMgr::getMem...(364) : Requested memory is greater than block size. Existing... : terminate called after throwing an instance of 'std::bad_alloc' : what(): St9bad_alloc : 已經終止 : (Thanks, Colbylai). Please see posts #273 and #295. : -- : 另外一個小問題… : : 在freeArr裡面,有一個todo : // TODO : // 1. Get the array size 'n' stored by system, : // which is also the _recycleList index : // ==> assert(n == getRecycleIdx(n * S + SIZE_T)); : : 可是我覺得這個assert是沒有意義的啊。 : 因為無論如何一定成立,完全沒有錯的可能性啊. : Please see post #252. : -- : 再來一個問題, : 老師的./memTest.debug去跑do4 : 最後會跑出完全看不懂的error... : XD. 那是沒有將 posts #273 and #295 修好的 reference programs 放到 ccws*. 我只更正了 hw4.tgz... sorry. (新的 reference programs 已上載) : -- : 還有想知道 memMgr.h 裡面 : 最上面在define Macro的時候, : 為甚麼每一行的最後面都有 "\" : 不是很了解那個的作用... : The string in the "define" MACRO must be in ONE line. Therefore, we use '\' (escape character) to tell the compiler that the line after should be concatenated to this line. : -- : 最後還想知道。 : : 在constructor裡面 : : MemBlock(MemBlock<T>* n, size_t b) : _nextBlock(n) { : _begin = _ptr = new char[b]; _end = _begin + b; } : : 哪些data member要用 ....() 這種方式來initialize : 哪些要在 { } 裡面 initialize : As I mentioned in lecture note#3, to pass parameters to the constructors of object type data member, the only chance is by ": xxx(y), ... { }" kind of initialization. If you do "xxx = AAA(y)" within { ... }, you will create an AAA object first and then "copy" to xxx. So in general, I would prefer to use ": xxx(y), ... { }" kind of initialization. In the MemBlock case, I guess I can also do --- ... : _begin(new char[b]), _ptr(_begin), _end(_begin + b), _nextBlock(n) {} Just forgot to do that... orz : -- : 感謝老師的回答orz : : -- : ※ 發信站: 批踢踢實業坊(ptt.cc) : ◆ From: 140.112.251.104 : 推 colbylai:posts #252, 273, 295 12/17 04:19 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.121.134.49 ※ 編輯: ric2k1 來自: 59.121.134.49 (12/17 07:31)
geniusjazz:sorry 沒有仔細爬文orz||| 感謝老師回答! 12/17 15:00