C和C++數據類型未對齊

字號:

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