→ 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