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