空指標的使用可能造成錯誤,指標初始化的時候未賦初值而造成的野指標的錯誤更加可怕。
前段時間在重寫opencv lk金字塔光流迭代演算法(cvcalcopticalflowpyrlk 函式)的時候,對初始化在程式中的重要作用有了更加深入的認識。
程式的具體問題如下,在處理比較小的的時候,直接執行會發生錯誤,原因是記憶體訪問越界(提示為該記憶體不能read)。但是用f5除錯執行的時候,則不會發生此錯誤。另外在處理比較大的的時候,對中畫素點的訪問提示訪問越界,仔細檢查後發現並無越界發生。除錯執行同樣出錯。
上網搜了一下,發現vc debug程式對除錯程式申請記憶體時候進行了保護,防止其非法訪問。但是這無法解決我的問題。
最後,試著將所有的指標初始化,問題得以解決。出問題的指標正是沒有初始化。由此可見變數初始化的重要性。因此建議,在定義變數的時候直接初始化,以免遺忘。指標定義的時候直接賦值為null。
另外,在定義類的時候,常常定義一些指標,由於建構函式對這些指標沒有初始化,因此也會造成隱藏的錯誤。因而建議在類的建構函式中將所有指標初始化為null。
記憶體初始化
電容的分類 dram 基本原件是電容,需要定時重新整理,儲存速度較慢 dram又分為 sram 同步動態隨機儲存器 synchronous dynamic random access memory ddr 雙倍速率同步動態隨機儲存器 double data rate sdram ddr2 在 ddr...
初始化指標
includeusing namespace std int main nullptr 是 c 新標準引入的特性,visual c 2010 編譯器支援它。過去已經使用0或 null 編譯器將用 0代替此巨集 來初始化指標,當然它們現在仍然可以使用。但是,使用 nullptr 初始化指標要好得多。因...
指標的初始化
指標代表的是記憶體單元的編號或位址,通過指標就可以找到對應的記憶體單元。對指標進行初始化或賦值的實質是將乙個位址或同型別 或相相容的型別 的指標賦給它,而不管這個位址是怎麼取得的。1 指標的初始化 指標初始化時,的右運算元必須為記憶體中資料的位址,不可以是變數,也不可以直接用整型位址值 但是int ...