2010-09-15 60 views
0

我有興趣瞭解更多關於在exes和dll之間混合運行時的知識。在WinXP機器上,我創建了一個針對發佈運行時(/ MD)的dll構建和一個調用構建debug(/ MDd)的dll中的函數的exe。 dll中的函數將內存分配給堆,exe將其刪除。我預計這會崩潰,但是,它會掛起。使用ProcessExplorer我看到可執行文件的狀態是「wait:userrequest」。在Vista機器上運行同樣的練習確實顯示對話框。我想在XP機器上看到對話框!爲什麼我看不到「應用程序錯誤」對話框?

我試過所有建議here的相反。我已經搜索了很長一段時間了。我已經玩過了在gpedit.msc中能夠找到的所有錯誤報告服務,並驗證錯誤報告服務正在AdministrativeTools-> Services對話框中運行。

要明確的,這是我的dll:

int* getDllMem(){ 
    printf("dll alloc mem"); 
    int *ptr = new int; 
    return ptr; 
} 

這裏是我的exe文件:

int main() 
{ 
    printf("main\n"); 
    int *ptr = getDllMem(); 
    printf("main delete\n"); 
    delete ptr; 
    printf("main exit\n"); 
    return 0; 
} 

回答

2

你的程序已經進入了不確定和錯誤的行爲。爲什麼在不同的操作系統上看到完全相同的結果?

如果在每臺機器上執行過程中發生了甚至稍有不同的事情,它可能會導致一個掛起而另一個立即崩潰。

也許程序在這些機器/操作系統之間使用的運行時間稍有不同。也許操作系統的其他方面有影響(例如,address space layout randomization)。

我懷疑只有對運行時和堆管理員非常熟悉的人才能回答爲什麼會有差異。對於這個問題,我的直覺反應是:你不應該花太多時間去擔心這兩個操作系統之間程序失敗的原因,因爲你永遠不應該寫這樣的程序。

0

XP和Vista有不同的系統架構,以及可能不同的彙編代碼。你在什麼機器上編譯程序? XP還是Vista?

+0

該程序僅在XP上編譯。當複製到Vista時,我看到有錯誤的對話框。 – JamesG 2010-09-15 19:54:00

+0

也許一個快速的解決方案可能是使用try/catch語句,並優雅地處理錯誤。 – alexy13 2010-09-15 21:01:09

相關問題