我想測試,如果它是確定訪問在C結構的未對齊的成員,請參閱該代碼訪問未對齊的結構構件
#include <stdio.h>
#pragma pack(1) /* force 1 byte alignment */
/* either member b or member d is mis-aligned */
typedef struct
{
int b;
unsigned char c;
unsigned int d;
}A ;
int main(int argc, char *argv[])
{
A _a = {0};
unsigned int *p = NULL;
unsigned int *q = NULL;
printf("addr of _a : 0x%08x, size of _a : %u\n", &_a, sizeof(_a));
p = (unsigned int*)(&_a.b);
q = (unsigned int*)(&_a.d);
/* should this fail ? */
(*p)++ , (*q)++;
return 0;
}
認爲程序會崩潰因但是事實證明它工作得很好,已經在Linux 3.6.11(GCC 4.7.2),WinXP(MingW),鍵盤在線編譯器(http://codepad.org/yOoc8ACG)
解釋結果,我想操作系統已經做了一些事情來保存程序,仍然懷疑它是否適用於VxWorks或其他操作系統
注意:代碼在基於Intel的機器上運行!
在此先感謝!
如果你嘗試並將p和q傳遞給另一個函數後會發生什麼?或者也許嘗試訪問這些位置的內存? – 2013-03-13 15:09:22
可能重複[未對齊的內存訪問總是會導致總線錯誤?](http://stackoverflow.com/questions/1496848/does-unaligned-memory-access-always-cause-bus-errors) – ecatmur 2013-03-13 15:10:05
在SPARC上運行。 – WhozCraig 2013-03-13 15:13:19