2010-10-28 56 views
0

我有一個動態加載的程序集的應用程序:新的XmlSerializer(typeof(MyClass))導致內存損壞?

Assembly asm = Assembly.Load("MyClass.DLL"); 
Type type = asm.GetType("MyClass"); 

MyClass runningAssembly = (MyClass)Activator.CreateInstance(type); 
runningAssembly.start(); 

一旦加載和start()方法被調用,執行這行代碼:

XmlSerializer deserializer = new XmlSerializer(typeof(MyClass)); 

而以下異常被拋出:

"Attempted to read or write protected memory. This is often an indication that other memory is corrupt." 

我一直在絆腳石的原因,並沒有能夠得到它的把握。有沒有人有任何提示?我似乎也無法捕捉到這個錯誤......它通過try/catch正確地發揮了作用。

順便說一句,錯誤沒有總是發生。有時在調試模式下它可以正常工作,但它似乎一旦啓動,即使重新啓動Visual Studio後也會一直髮生。重新啓動將其清除並允許其至少工作一次。從編譯的EXE運行時也會發生這種情況。

編輯

我想同樣的事情,但沒有動態加載的程序集。我把它叫做作爲一類直接,即:

MyClass c = new MyClass(); 
c.start(); 

而同樣的問題仍然存在,所以它不會出現可能與被動態加載。

回答

1

現在很難在沒有任何關於MyClass的情況下導致問題。什麼是構造函數,尤其是什麼在start()方法?代碼是否有任何不安全的代碼?如果你正在處理不安全的內存,你很可能會遇到所描述的行爲。

如果您的start()方法正在啓動一個新線程,並且在新線程上拋出異常,您將無法在圍繞start方法的try/catch中捕獲它。