看板 EE_DSnP 關於我們 聯絡資訊
※ 引述《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
e124553423:一樣+1,可能是老師在new dummynode時有傳入字串吧 11/27 21:07
e124553423:修正 不是字串,應該是T() 11/27 21:07
e124553423:看了code發現dlist.h本來就有傳入T() 那就不知道了XD 11/27 21:10
victoret:同樣的問題推! 11/27 21:19
victoret:在 insert 的時候傳進來的 x 也是 vkuux... 11/27 21:20
ric2k1:因為 DList 的 constructor 會 new 一個 DListNode* 給 11/27 21:35
ric2k1:_head, 而傳進去的參數是 T() (i.e. AdtTestObj()), 所以 11/27 21:35
ric2k1:會去產生 random string "vkuux". 也就是說, dummy node 11/27 21:36
ric2k1:裏頭存的就是這個 "vkuux",而之後 adta -r 存入的才是fitho 11/27 21:37
vuluy:可是我dummy node和adta -r存的都是"vkuux"沒道理兩次一樣 11/27 21:43
e124553423:我用ddd跑過,我的程式adta -r的時第一個字串是vkuux 11/27 21:59
e124553423:但老師的第一個是我的第二個字串 11/27 21:59
e124553423:剛看了一下dummynode裡面也確實是vkuux沒錯 11/27 22:08
ric2k1:咦? 為什麼 vkuux 會被產生兩次呢? 可以去main/adtTest.cpp 11/27 22:42
ric2k1:裏頭用 debugger 或 cout 看一下 AdtTestObj 的constructor 11/27 22:43
ric2k1:發生什麼事嗎? 11/27 22:43
storym94374:現在看到vkuux就頭痛...一直無法de出bug來orz 11/27 23:23
victoret:目前確定確實會在程式一開始呼叫 constructor,然後在產 11/28 00:45
victoret:生第一個 Dlist 的 element 的時候也會呼叫 constructor 11/28 00:46
victoret:但是生成的字母是一樣的@@ 11/28 00:46
victoret:然後假如我手動在 constructor 裡面讓他多跑五個 rnGen 11/28 00:58
victoret:就會發現說,在使用 adta -r 產生第一個 element 的時候 11/28 00:59
victoret:rnGen 產生的亂數又全部重頭開始了...不知道是怎麼回事 11/28 00:59
victoret:結論: 11/28 01:01
victoret:在 DList 的 constructor 產生 dummy node 之後 11/28 01:01
victoret:AdjTestObj 裡的 rnGen 會重新開始 11/28 01:02
victoret:不過好像也是有人沒遇到這種狀況的說ˊˋ 11/28 01:03
victoret:最新的測試: 11/28 11:46
victoret:我跟已經寫好而且第一個 element 不是 vkuux(正常狀況) 11/28 11:47
victoret:的同學借 code 來看看... 11/28 11:47
victoret:意外的發現假如在我的電腦裡跑的時候,第一個 element 仍 11/28 11:48
victoret:然是 vkuux。但是在他的電腦裡面卻成功的出現 fitho... 11/28 11:49
victoret:(忘了說明上面是拿同學的 code 來 compile) 11/28 11:49
victoret:後來有想過說會不會是因為更新 lib 的關係,就把舊的 lib 11/28 11:50
victoret:拿出來用,但是結果還是一樣的...ˊˋ 11/28 11:50
victoret:然後假如把自己的程式丟到那位同學的電腦上跑 11/28 13:24
victoret:結果也是正確的... 11/28 13:24
victoret:難道是電腦本身的問題?! 11/28 13:24
vuluy:這樣是g++版本的問題嗎?在同一台電腦compile結果就會一樣 11/28 15:43