解決堆損壞的一點心得

2022-08-05 05:39:15 字數 818 閱讀 8970

解決堆損壞的一點心得

之前在實現水印提取的過程中,遇到了乙個詭異的異常。為了較好的說明出現問題的情況,假定我執行的函式為f(),其**如下:

點選中斷資訊框中的繼續,出現如下提示資訊:

於是開始使用斷點除錯,發現程式中斷的位置不確定,有時在執行code a時中斷,有時在第一次執行code b時中斷,有時在執行完所有**,即將退出f函式時中斷。這讓我費了相當長的時間來除錯程式。

然而正如上面所說的那樣,使用斷點除錯根本無法定位到真正出現問題的**語句。因此,我使用了之前用過的「注釋法」。具體做法是,注釋掉for語句完後的所有**,在f函式中只保留code a**,如果程式出現中斷,則從code a的末尾開始,從後往上逐漸注釋掉code a中的**,如果程式沒有出現中斷,說明引起中斷的位置不在code a中,因此要從code a**的末尾開始,從後往下逐漸去除掉它下面的**的注釋。

在我的這個問題中,當我注釋掉for語句之後的**後,程式中斷了,說明引起中斷的**就在code a中,依次縮小範圍,最終找到了問題的根源。原來是在讀取檔案的時候,宣告的空間小於檔案中的內容,因此出現了指標的越界。

這種記憶體分配和釋放引起的錯誤雖然比邏輯錯誤更加容易發現,但這種錯誤往往也不好定位到具體的位置,因此,在設定到分配記憶體空間,為指標申請記憶體的時候,一定要仔細,避免出現上述錯誤。

SQL一點心得

sql語句將所有 stock 表裡的 縮寫 led甲 替換改寫成 led刷 update dbo stock set 縮寫 replace 縮寫 led甲 led刷 where 縮寫 like led甲 go字首 update mytable set myfield replace myfield,...

Cell myCell一點心得

ctor initializer形如 cell cell mvalue 0 mstring ctor initializer,能在建立資料成員的同時賦初值 1.const方法的工作原理是將方法內用到的資料成員都標記為const引用。因此試圖修改資料成員時,編譯器報錯。2.用explicit關鍵字標記...

openjudge 一點心得

031 校門外的樹 總時間限制 1000ms 記憶體限制 65536kb 描述某校大門外長度為l的馬路上有一排樹,每兩棵相鄰的樹之間的間隔都是1公尺。我們可以把馬路看成乙個數軸,馬路的一端在數軸0的位置,另一端在l的位置 數軸上的每個整數點,即0,1,2,l,都種有一棵樹。由於馬路上有一些區域要用來...