崩溃for for循环(Android NDK)

时间:2018-04-10 07:45:02

标签: android c++ android-ndk crashlytics-android

我有以下代码(来自我的类​​成员函数):

        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行出错?

1 个答案:

答案 0 :(得分:1)

是的,如果指针无效,那就是UB。但是我们在讨论Android NDK和统计工具时会考虑特定的平台和编译器。对于无效指针,本机ARM代码行1,2,4行可能会崩溃有时,只写入空指针是100%失败。

如果mMiddle为空,第3行将始终失败,但如果它指向数据段,则可能会也可能不会。统计工具将突出显示第4行,因为它是一个经常执行的第4行:比较表达式在每次迭代时进行评估。其他线路上的故障可能会成为统计噪音。