作者vuluy (伏卢)
看板EE_DSnP
标题Re: [问题] adta -r
时间Sun Nov 27 18:52:01 2011
※ 引述《rf0914 (<-使用者代号)》之铭言:
: 我发现我做出来的乱数似乎跟老师的ref不太一样耶
: 以dlist的do2为例
: 在做data -r 5000时
: 前半部分的乱数还是一样的
: 但在第[3175]之後不知为何就不一样了
: 然後後半部分又都一样,也都结束在4997的地方 (代表-r时有三个重复的?)
: 不知道这可能的原因是什麽...??
: 这应该是跟TODO无关的阿?
我跟原PO有一样的问题
adts -r第一个出现的string是vkuux
之後就和ref档一样
若先adtr 10再adta -r 1
第一个会是vkuuxfitho
而ref档则会是fithomqjny
而且我发现vkuux是dummy node里面存的data
应该在constructor的时候
就会random过存进dummy node
不知道为什麽会在第一次adta -r的时候又再出现
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.112.249.129
1F:→ e124553423:一样+1,可能是老师在new dummynode时有传入字串吧 11/27 21:07
2F:→ e124553423:修正 不是字串,应该是T() 11/27 21:07
3F:→ e124553423:看了code发现dlist.h本来就有传入T() 那就不知道了XD 11/27 21:10
4F:推 victoret:同样的问题推! 11/27 21:19
5F:→ victoret:在 insert 的时候传进来的 x 也是 vkuux... 11/27 21:20
6F:推 ric2k1:因为 DList 的 constructor 会 new 一个 DListNode* 给 11/27 21:35
7F:→ ric2k1:_head, 而传进去的参数是 T() (i.e. AdtTestObj()), 所以 11/27 21:35
8F:→ ric2k1:会去产生 random string "vkuux". 也就是说, dummy node 11/27 21:36
9F:推 ric2k1:里头存的就是这个 "vkuux",而之後 adta -r 存入的才是fitho 11/27 21:37
10F:→ vuluy:可是我dummy node和adta -r存的都是"vkuux"没道理两次一样 11/27 21:43
11F:→ e124553423:我用ddd跑过,我的程式adta -r的时第一个字串是vkuux 11/27 21:59
12F:→ e124553423:但老师的第一个是我的第二个字串 11/27 21:59
13F:→ e124553423:刚看了一下dummynode里面也确实是vkuux没错 11/27 22:08
14F:推 ric2k1:咦? 为什麽 vkuux 会被产生两次呢? 可以去main/adtTest.cpp 11/27 22:42
15F:→ ric2k1:里头用 debugger 或 cout 看一下 AdtTestObj 的constructor 11/27 22:43
16F:→ ric2k1:发生什麽事吗? 11/27 22:43
17F:推 storym94374:现在看到vkuux就头痛...一直无法de出bug来orz 11/27 23:23
18F:推 victoret:目前确定确实会在程式一开始呼叫 constructor,然後在产 11/28 00:45
19F:→ victoret:生第一个 Dlist 的 element 的时候也会呼叫 constructor 11/28 00:46
20F:→ victoret:但是生成的字母是一样的@@ 11/28 00:46
21F:推 victoret:然後假如我手动在 constructor 里面让他多跑五个 rnGen 11/28 00:58
22F:→ victoret:就会发现说,在使用 adta -r 产生第一个 element 的时候 11/28 00:59
23F:→ victoret:rnGen 产生的乱数又全部重头开始了...不知道是怎麽回事 11/28 00:59
24F:→ victoret:结论: 11/28 01:01
25F:→ victoret:在 DList 的 constructor 产生 dummy node 之後 11/28 01:01
26F:→ victoret:AdjTestObj 里的 rnGen 会重新开始 11/28 01:02
27F:→ victoret:不过好像也是有人没遇到这种状况的说ˊˋ 11/28 01:03
28F:推 victoret:最新的测试: 11/28 11:46
29F:→ victoret:我跟已经写好而且第一个 element 不是 vkuux(正常状况) 11/28 11:47
30F:→ victoret:的同学借 code 来看看... 11/28 11:47
31F:→ victoret:意外的发现假如在我的电脑里跑的时候,第一个 element 仍 11/28 11:48
32F:→ victoret:然是 vkuux。但是在他的电脑里面却成功的出现 fitho... 11/28 11:49
33F:→ victoret:(忘了说明上面是拿同学的 code 来 compile) 11/28 11:49
34F:→ victoret:後来有想过说会不会是因为更新 lib 的关系,就把旧的 lib 11/28 11:50
35F:→ victoret:拿出来用,但是结果还是一样的...ˊˋ 11/28 11:50
36F:推 victoret:然後假如把自己的程式丢到那位同学的电脑上跑 11/28 13:24
37F:→ victoret:结果也是正确的... 11/28 13:24
38F:→ victoret:难道是电脑本身的问题?! 11/28 13:24
39F:→ vuluy:这样是g++版本的问题吗?在同一台电脑compile结果就会一样 11/28 15:43