[問題] Release Mode and Debug Mode

看板Programming作者 (tonit)時間17年前 (2008/04/13 04:50), 編輯推噓3(304)
留言7則, 5人參與, 最新討論串1/1
各位板友好 我遇到一個問題如下: 我正在做圖學作業 Photon Mapping 用的編譯器是 VC 2005 其中 Debug Mode 的結果是正確 但是 Release Mode 的結果是錯誤的 我一定得用 Release mode來執行否則我想要畫完整一點的圖就會畫不完 經過追蹤 我是在去 kd-tree 拿取 Photon 資料的時候出錯 錯誤程式碼節錄如下 void PhotonMap :: locate_photons( NearestPhotons *const np, const int index ) const //****************************************** { const Photon *p = &photons[index]; float dist1; if (index<half_stored_photons) { dist1 = np->pos[ p->plane ] - p->pos[ p->plane ]; // p 就出錯了 //****************************************** 也就是說 指標 p->plane 指出來的結果 在 Release 和 Debug 是不一樣的 Release 指到的根本是個亂數 (我用 Release Mode debuger 去看的結果) 我毫無頭緒為什麼會發生這樣的錯誤 請問我可以用什麼樣的方法來Debug呢? 以下節錄 PhotonMap Construtor //****************************************** PhotonMap :: PhotonMap( const int max_phot ) //************************************************ { stored_photons = 0; prev_scale = 1; max_photons = max_phot; photons = (Photon*)malloc( sizeof( Photon ) * ( max_photons+1 ) ); //Photon z[sizeof(Photon)*300+1]; //photons = z; if (photons == NULL) { fprintf(stderr,"Out of memory initializing photon map\n"); exit(-1); } } //*************************************************** //****************************************** 謝謝各位的耐心看完 有任何意見都歡迎回覆 -- -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 130.126.76.76

04/13 13:37, , 1F
檢查看看 p->plane 有沒有正確初始化?
04/13 13:37, 1F

04/13 14:08, , 2F
試試看使用volatile對這個變數不做最佳化
04/13 14:08, 2F

04/13 22:35, , 3F
先把p->plane改成 (photon+index)->plane
04/13 22:35, 3F

04/13 22:36, , 4F
然後先把compiler的最佳化關掉看看吧
04/13 22:36, 4F

04/13 22:37, , 5F
再去檢查index是否合法吧...
04/13 22:37, 5F

04/13 23:07, , 6F
通常都是某個變數沒初始化的關係
04/13 23:07, 6F

04/16 09:21, , 7F
謝謝各位回覆 有些問題我可能會寄信詢問 :)
04/16 09:21, 7F
文章代碼(AID): #180P4ULI (Programming)