我寫這樣一個功能:C程序數組作爲參數
void func1(char chx[], int y)
{
int wsn = 0;
wsn = *(int *) (&chx[2]);
if (wsn == 0) {
...
}
}
編譯器工作良好,沒有警告,沒有錯誤。但是當代碼運行時,似乎會得到一個野指針。代碼崩潰了。
想知道它爲什麼會崩潰
我寫這樣一個功能:C程序數組作爲參數
void func1(char chx[], int y)
{
int wsn = 0;
wsn = *(int *) (&chx[2]);
if (wsn == 0) {
...
}
}
編譯器工作良好,沒有警告,沒有錯誤。但是當代碼運行時,似乎會得到一個野指針。代碼崩潰了。
想知道它爲什麼會崩潰
編譯所有警告和調試信息。使用調試器來了解發生了什麼。這取決於你的'func1'被調用的方式,以及編譯器,優化,處理器和ABI。也許是對齊問題。 – 2014-11-08 12:20:07
因爲1.指針不是數組,2.數組不是指針,3.這違反了嚴格的別名規則,因此它具有UB。 – 2014-11-08 12:20:17
@BasileStarynkevitch此外,'chx'是一個指針,所以'&chx!= chx'。 – 2014-11-08 12:20:43