我有以下代码(来自我的类成员函数):
this->mLengOfPath = mFirst->mLengOfPath + mSecond->mLengOfPath;
unsigned short* data = mMiddle->mPathContainer;
mMiddle->mLengOfPath = 0;
for (int index = 0; index < mMiddle->mSize; index++) { //crash here
if (index % 2 == 1 && index > 2){
mMiddle->mLengOfPath +=
GestureUtils::distance(data[index - 3], data[index - 2],
data[index - 1], data[index]);
}
}
在大多数情况下,此代码不会崩溃。但是崩解论者告诉我我的代码&#34;有时&#34;在第4行崩溃,我不明白为什么。如果mMiddle是nullptr,它应该在第2行崩溃(我已经在那里使用了mMiddle)。
但是碰撞学家一直报告第4行是问题所在。任何人都知道我的代码怎么能在第4行出错?
答案 0 :(得分:1)
是的,如果指针无效,那就是UB。但是我们在讨论Android NDK和统计工具时会考虑特定的平台和编译器。对于无效指针,本机ARM代码行1,2,4行可能会崩溃有时,只写入空指针是100%失败。
如果mMiddle
为空,第3行将始终失败,但如果它指向数据段,则可能会也可能不会。统计工具将突出显示第4行,因为它是一个经常执行的第4行:比较表达式在每次迭代时进行评估。其他线路上的故障可能会成为统计噪音。