我写这样一个功能: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