March 30,2009
在Relase模式下使用Debug Message
有時候會想在release模式追蹤一些數值,但是偏偏方便的Trace又只能在Debug模式下使用,這時候其實可以直接call OutputDebugString () 這個 function,就可以達到和Trace一樣的效果。
March 24,2009
防止QuickTime因為程式crash而沒有正確釋放資源
寫QuickTime相關程式的時候,有時會因為要debug而常常不正常結束QuickTime相關的程式,但是因為沒有正確的釋放QuickTime的資源,有可能造成QuickTime再也開不起來(會卡死在InitializeQTML()裡)。
預防的方法是……
先開一個什麼事都不做的QuickTime Player在旁邊放著
原理不明,但猜測由於系統中還有至少一個QuickTime相關的程式開著,所以在正常或是不正常結束的時候不會真的去釋放QuickTime的resource,而不會造成一些resource被錯誤的釋放最後造成QuickTime無法開啟的情形。
March 18,2009
少見的C記憶體管理function
calloc (count, size)
大致上用法和malloc差不多,不過它是用來方便allocate structure的array
要傳的參數是兩個,第一個參數是structure個數,第二個則是structure的大小
另外用這個function allocate完的記憶體是清除過的
offsetof (struct name, struct member)
這個函數超詭異的,用來算出struct中某個變數的位置……
在下面這個Quicktime的範例程式中第一次看見這兩個function的組合
主要用來 allocate 最後一個欄位是可變動長度structure array的structure
基本上這兩個function組合起來,大致上只是節省了一些programmer寫算式的時間
但是看起來就是比較帥(誤)
大致上用法和malloc差不多,不過它是用來方便allocate structure的array
要傳的參數是兩個,第一個參數是structure個數,第二個則是structure的大小
另外用這個function allocate完的記憶體是清除過的
offsetof (struct name, struct member)
這個函數超詭異的,用來算出struct中某個變數的位置……
在下面這個Quicktime的範例程式中第一次看見這兩個function的組合
主要用來 allocate 最後一個欄位是可變動長度structure array的structure
基本上這兩個function組合起來,大致上只是節省了一些programmer寫算式的時間
但是看起來就是比較帥(誤)
| AudioBufferList * buflist = calloc(1, offsetof(AudioBufferList, mBuffers[numchannels])); |