2012-02-23 76 views
8

爲了捕獲64位指針截斷錯誤,我添加了代碼片段here,該代碼片段保留底部4GB的內存,以便分配高於32位。在MFC x64測試應用程序中,我首先在InitInstance()中調用保留函數。然後我添加了一個按鈕,簡單地做:當底部4GB滿時FileDialog崩潰

CFileDialog dlg(TRUE); 
dlg.DoModal(); 

調用的DoModal最終在「無人區」調用堆棧某處崩潰:

> 000000018000163b() 
    0000000100000024() 
    0000000000000001() 

,因爲我得到了相同的行爲這不是MFC特定一個.NET FileDialog。由於實際的fileDialog簡要顯示然後崩潰,我認爲這是我手中的東西。感覺像是一個shell擴展或者其他什麼東西,但是由於調用堆棧沒有幫助,我無法得到它來自哪裏,但是我想知道是否有任何事情可以做!

如果我刪除特殊預留功能,我不會再發生崩潰。

困惑!

+5

嗯,這是工作,你正趕上指針錯誤。只是不在你的代碼中。使用SysInternals的AutoRuns實用程序禁用外殼擴展。 – 2012-02-23 14:02:29

+0

如果您使用'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

+0

你可以檢查它發生在哪個模塊的地址空間,或者堆棧被搗毀嗎? – 2012-02-23 14:21:39

回答

1

我無法重現這次崩潰。我創建了一個64位項目,添加了4 GB預留,並在其中打開了一個文件對話框。沒有崩潰。

我的報告不符合你的要求,或者你的系統上有不同的東西。您應該發佈您的項目,以便我們可以刪除其中一個變量。

不幸的是我不記得TppWorkerThread是什麼。

發佈您的項目 - 所有源文件,資源文件,.vcxproj文件和.sln文件。然後我們可以調查。

+0

布魯斯給了我一個想法:你確定在你的進程中沒有加載其他DLL?我知道很多在對話框中加載自己的擴展,他們可能是把它們放下來的擴展。 – ixe013 2012-03-02 04:45:18

1

在這個問題上跟進,我們發現,通過360 SDK安裝一個外殼擴展導致問題(xeshlext.dll)

+0

我自己的跟進。我們發現一個內部服務與360外殼擴展衝突並導致崩潰。升級到最新版本修復了一切。對不起,打擾你! – 2012-04-03 12:50:22