作者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