在專案的尾期遇到了乙個問題,程式編譯出的release版本,交給測試人員,總是出現一些莫名其妙的錯誤,而且這些錯誤沒有規律可循,十分詭異。而且錯誤之間沒有規律。剛開始我總是在本機的debug版本下試圖重現,可怎麼都重現不了。
試圖從邏輯上發現bug,確實修改了一些bug,明明沒有問題了,可是一到測試那裡,問題又重現了。
痛苦了好幾天,百思不得其解。後來在release下,重現了乙個錯誤,通過附加程序,發現是乙個用於控制的int型數字不對,突然想起之前看過的文章,說在release下,對變數的初始化和在debug下是不同的,一下子豁然開朗,原來是變數沒有初始化做的怪!
把程式中,需要用到的變數,都做了初始化,果然問題沒有了。1. 變數。
大家都知道,debug跟release在初始化變數時所做的操作是不同的,debug是將每個位元組位都賦成0xcc,而release的賦值近似於隨機。如果你的程式中的某個變數沒被初始化就被引用,就很有可能出現異常:用作控制變數將導致流程導向不一致;用作陣列下標將會使程式崩潰;更加可能是造成其他變數的不準確而引起其他的錯誤。所以在宣告變數後馬上對其初始化乙個預設的值是最簡單有效的辦法,否則專案大了你找都沒地方找。**存在錯誤在debug方式下可能會忽略而不被察覺到。debug方式下陣列越界也大多不會出錯,在release中就暴露出來了,這個找起來就比較難了。
總結:程式設計不是看書就能精通的,經驗非得碰個頭破血流才能記牢!別人的經驗看一百遍也意識不到重要性,只有自己碰到了這個坎,踏過去了才能醒悟!
經驗不是憑空得到的,每個程式設計老手都是從無數的問題、教訓中殺出來的!
遇到問題不是麻煩,應該慶幸遇到了問題,感謝問題,才能使自己漲經驗!
變數初始化
int a 是變數定義,也就是說編譯器將為a分配儲存,這在編譯時被處理。int a 0 是定義 初始化,定義的分配儲存的action在編譯時完成,初始化的action則在執行時完成 將執行類似dword ptr ebp 4 0的指令,而單獨的int a 不會有對應的執行指令 定義是分配空間,而初始化...
初始化 1 預設初始化 列表初始化
初始化的基本概念 事實 初始化和賦值是兩個完全不同的操作。初始化,是建立變數時賦予其乙個初始值。賦值,是把物件的當前值擦除,用乙個新值代替。列表初始化 p39 作為c 11新標準的一部分,用花括號 來初始化變數得到了全面應用。出於某些原因,這種初始化的方式叫做列表初始化。現在,無論是初始化物件還是某...
變數的初始化
變數可以分為兩種,一種是方法內的區域性變數,另一種是類的成員變數 對於區域性變數,編譯器強制只有在初始化其值得時候才能使用,而成員變數會進行預設初始化。一 區域性變數必須先初始化後使用 public class test 二 成員變數的初始化 所有的成員變數 包括基本型別和類引用 其自動初始化是在剛...