爲了捕獲64位指針截斷錯誤,我添加了代碼片段here,該代碼片段保留底部4GB的內存,以便分配高於32位。在MFC x64測試應用程序中,我首先在InitInstance()中調用保留函數。然後我添加了一個按鈕,簡單地做:當底部4GB滿時FileDialog崩潰
CFileDialog dlg(TRUE);
dlg.DoModal();
調用的DoModal最終在「無人區」調用堆棧某處崩潰:
> 000000018000163b()
0000000100000024()
0000000000000001()
,因爲我得到了相同的行爲這不是MFC特定一個.NET FileDialog。由於實際的fileDialog簡要顯示然後崩潰,我認爲這是我手中的東西。感覺像是一個shell擴展或者其他什麼東西,但是由於調用堆棧沒有幫助,我無法得到它來自哪裏,但是我想知道是否有任何事情可以做!
如果我刪除特殊預留功能,我不會再發生崩潰。
困惑!
嗯,這是工作,你正趕上指針錯誤。只是不在你的代碼中。使用SysInternals的AutoRuns實用程序禁用外殼擴展。 – 2012-02-23 14:02:29
如果您使用'GetOpenFileName'(http://msdn.microsoft.com/en-us/library/windows/desktop/ms646927%28v=vs.85%29.aspx)嘗試相同的操作,會發生什麼情況? + Ton site web est down ... – ixe013 2012-02-23 14:07:58
你可以檢查它發生在哪個模塊的地址空間,或者堆棧被搗毀嗎? – 2012-02-23 14:21:39