作者ric2k1 (Ric)
看板EE_DSnP
标题Re: [问题] 一些小问题
时间Sun Dec 17 07:28:17 2006
※ 引述《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)
1F:推 geniusjazz:sorry 没有仔细爬文orz||| 感谢老师回答! 12/17 15:00