C和C++數(shù)據(jù)類型未對齊

字號:

自己定義了一個結構,寫了一個dll返回這個結構的數(shù)據(jù),結果一直出現(xiàn)錯誤,后來把VS2005的所有異常打開,報出了DATA misalignment的錯誤,查了查對我也沒什么幫助。只是猜想內存對齊的問題。
    但我的結構的定義是3個指針,那就是3個機器字,這樣來看是沒問題的,不存在內存為對齊。
    后來寫程序試驗,看著每一條語句修改的內存數(shù)據(jù)的區(qū)域,發(fā)現(xiàn)win32中的COM中,BSTR使用了SysStringByteLen和SysStringLen來計算字符串長度,而我也是通過這個來malloc數(shù)據(jù),所以可能是計算的字節(jié)數(shù)有問題。導致數(shù)據(jù)覆蓋,結果修改后不在報錯。
    考試大總結:
    win32提供了_tcslen來計算字符串的長度,實際不管是否使用unicode,返回的都是字符串的字符長度,即對于unicode,L"ab你好"返回的是4,就是4個字符。
    SysStringByteLen返回的是一個字符串的字節(jié)數(shù),參數(shù)是BSTR,(BSTR開始2個字節(jié)存儲著字符串長度),L"ab你好" 返回的是字符串中字符占用的字節(jié)數(shù),即8個字節(jié)
    SysStringLen返回的和_tcslen一樣。