[點(diǎn)晴永久免費(fèi)OA]System.AccessViolationException: 嘗試讀取或?qū)懭胧鼙Wo(hù)的內(nèi)存。這通常指示其他內(nèi)存已損壞。
昨天寫的RC4的加解密程序,當(dāng)C#調(diào)用C的dll時(shí)就會出現(xiàn)這個(gè)提示,嘗試怎么修改都不行。Debug跟蹤顯示,應(yīng)該返回string類型的函數(shù)返回值為空。也不知道怎么調(diào)試dll,dll里下的斷點(diǎn)始終提示無效。單獨(dú)運(yùn)行dll里的函數(shù),結(jié)果沒有問題。幾乎可以斷定是函數(shù)返回的地方出錯了。 終于搞清楚錯誤的真正原因了。詭異的是,這個(gè)錯誤是我趴在桌子上半夢半醒的狀態(tài)下想到的。更詭異的是,睡醒了之后還記得睡夢中的想法。嘗試修改錯誤,竟然真的就成功了。有點(diǎn)玄...... 這個(gè)錯誤其實(shí)不應(yīng)該犯,《C專家編程》和《C陷阱與缺陷》里都提到過,自己也做了這條的筆記。只是之前幾乎一樣的dll調(diào)用都做過,也都成功運(yùn)行得到了正確的結(jié)果,就以為dll里不會出什么錯,一直在C#的代碼里找錯。而且同樣的錯誤提示也見過,只是那時(shí)是糊里糊涂的把數(shù)組賦個(gè)初始值就解決了,也就沒太在意。 錯誤提示: 有關(guān)調(diào)用實(shí)時(shí)(JIT)調(diào)試而不是此對話框的詳細(xì)信息, |