C 呼叫C 介面導致記憶體越界 引起程式崩潰

2021-08-17 00:14:47 字數 614 閱讀 4710

問題描述:

介面呼叫後,功能正常,但是軟體操作若干次後(單擊介面、影象操作、影象瀏覽等任意操作),軟體直接崩潰到c#程式入口處,錯誤提示中錯誤**0x00000005,明顯是記憶體訪問越界等典型問題;

分析解決問題:

但是檢查**並確認無記憶體洩漏(注意:不是記憶體洩漏的問題造成的,卻朝著記憶體洩漏的方向走下去,結果就是無頭緒),一次次確認都不行,但是注釋掉介面函式內部所有**,只保留return 0;就沒有問題,於是開始清空所有腦袋中的思維定式,以重寫介面函式的狀態檢查**,突然發現,介面返回計算結果時,利用了指標作為形參,會不會是軟體呼叫介面時申請的記憶體不夠呢?

於是檢查介面呼叫,果然要求的陣列必須17個元素,但是只申請了16個,典型的第乙個元素標號為0導致的bug;那麼問題就好解釋了,記憶體被越界違法修改後,並不是馬上就會對程式造成影響,當程式執行過程中用到被違法修改的堆記憶體時,程式直接崩潰,這就是為什麼記憶體越界不會導致軟體立刻崩潰在越界訪問的函式部分,也就導致該問題難以定位。

總結:1.積累經驗:指標作為函式引數的問題,容易導致記憶體越界訪問;

2.收穫經驗:遇到問題時容易著急試錯,導致分析問題不徹底,思路不清晰,沒有冷靜的分析,導致了解決問題時的手足無措和毫無章法的試錯,這裡的錯誤**0x00000005需要謹記!

C 反射呼叫WebService引起記憶體洩漏

最近寫了乙個小工具,用來定時檢測公司各台伺服器上的webservice是否工作正常.如果無法訪問則報警.開發思路也很簡單,設定乙個timer,定時啟動多個執行緒 每個執行緒負責n臺伺服器訪問任務 去動態訪問各伺服器上的webservice的指定方法.然後對異常資訊進行報警.動態訪問webservic...

C 呼叫C 介面

1 system.dllnotfoundexception 型別的未經處理的異常在 test.exe 中發生 其他資訊 無法載入 dll dll ar algorithm.dll 找不到指定的模組。異常來自 hresult 0x8007007e 該問題的原因是程式無法找到ar algorithm.d...

關於C 記憶體越界訪問的問題

今天是第一天寫部落格,哈哈,想想還有點激動,啦啦。言歸正傳啊,今天主要是說c基礎裡的strcat函式,它的意思主要是進行字元的拼接,例如 來自 函式名 strcat 功 能 字串拼接函式 用 法 char strcat char destin,char source 程式例 i nclude i n...