这个BUG是在ARM处理器上调试一段代码时发现的
问题出在以下的代码中:
CFontName::CFontName(int id, LPWSTR pwStr, CFontName *pNext)
{
int len;
for (len = 0; len < 16; len++) {
if (pwStr[len] == 0) <<------------这一行会crash且len=0
break;
}
...
}
把pwStr的地址打了一下,以及一开始申请malloc这个地址的地方也打印了一下,可以肯定的是
1)crash发生时,pwStr不为NULL
2)pwStr在它申请的范围内也没有越界
哪么还有什么原因导致了这个crash呢?
原来LPWSTR是2字节的指针,类似于unsigned short *, 而当发现crash发生时,pwStr的值为一个奇数,而pwStr[len]的这种使用方式是要求2字节对奇的
这就是为什么CRASH的原因了。
可以用一段很短的代码来进行测试:
int
main(int argc, char** argv)
{
char* p;
short* p1;
p = malloc(10);
p1 = (short*)(p+1);
p1[0] = 0x55; <--会Crash
return 0;
}
注意:不同的编译方式及不同的处理器出现的情况有所不同。
字节对齐问题产生的Crash
最新推荐文章于 2022-07-09 21:16:58 发布