看板 C_and_CPP 關於我們 聯絡資訊
請教板上經驗豐富的前輩 目前是幫朋友 想辦法解決他遇到的問題 希望可以給他意見 幫助他找出問題 該往哪去找出問題癥結 他的症狀是這樣 A專案跟 B專案,A專案編成 .lib 給 B 用 B編出exe => 正確 現在把 A 跟 B 合併成一個專案一起編出一個exe 只要new 或是 vector的push_back 就會發生以下問題 http://140.113.207.215/Image.jpg <==VC 2008 + win7 64bit
換個平台試試看又會發生 http://140.113.207.215/Image3.jpg <==VC 2008 + vista 32bit
其實之前寫code也常遇到: 同一個bug造成錯誤 每次跳出的錯誤都不太一樣... 如果用release跑 會出現 http://140.113.207.215/Image4.jpg
看起來是 存取到非法記憶體了 但是也很怪 只是new 並沒有開始access就跑出問題.... 目前他的程式並不是會吃大量記憶體的 100MB以下.. code都沒改只不過合併專案就發生這怪問題 以上問題可能有點籠統.. 不過想了解一下各位 遇到這種奇怪的問題 該往哪個方向 或是 如何找出root cause嗎? new壞了......邏輯沒變 怎麼會突然壞掉? 還是說程式跑到某種情況下 new一定會失敗 且無法recover? 請給予指教 謝謝大家!! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.192.90.252
sunneo:可能真的把heap的link寫爛了 使得new在找可用記憶體時失敗 03/16 02:55
QQ29:怎麼才能寫壞呀@@這我能控制嗎 還是疏忽了什麼 03/16 03:02
QQ29:剛討論下發現 把 __declspec(align(16)) 這字眼去掉 03/16 03:33
QQ29:new可以過 但是 push_back還是壞 ..我不懂align跟出錯有絕對 03/16 03:33
QQ29:關係嗎? 還是只是巧合....雖然也不知道align目的是啥= = 03/16 03:34
QQ29:只知道效果.. 整個不知道問題癥結在哪.... 03/16 03:37
yoco315:interesting :D 有沒有整個專案的包阿.. 我想試試看... 03/16 09:08
VictorTom:我之前遇到過, vector在push_back的時候就炸heap, 當初 03/16 09:10
VictorTom:還問co-work的同事是不是有設heap上限; 後來仔細再查才 03/16 09:11
VictorTom:發現, 某個地方我new了char[], 然後還掉了, 可是後面的 03/16 09:11
VictorTom:code又不小心對它讀寫, 結果有趣的是某段程式固定跑迴圈 03/16 09:12
VictorTom:到第n圈的時候, vector的push_back就導致類似的error了. 03/16 09:12
VictorTom:所以小弟我是覺得, 肯定是哪邊ptr用壞了, 寫了不該寫的. 03/16 09:13
windincloud:感謝樓上的經驗~ 最近也在解類似的東西 03/16 09:16
windincloud:~vector<T*> 失敗~ 不知前人怎用ptr的~ 洞挖超深的~XD 03/16 09:17
holyspectral:先掛AppVerifier跑看看吧... 03/16 18:49
WPC001:建議用debug來trace一次吧... 然後再從呼叫堆疊查起 03/17 21:09