RenderScript:rsObjectBase.cpp中的断言失败

时间:2016-11-05 18:07:20

标签: android renderscript android-renderscript

我在我的应用程序的logcat输出中看到了很多以下错误消息:

E/RenderScript: rsAssert failed: mSysRefCount > 0, in frameworks/rs/rsObjectBase.cpp at 147

尽管如此,应用程序确实可以正常工作,但有时候在启动RenderScript代码几次后它会因SIGSEGV而崩溃。

我能够追踪问题(好吧,我认为)。我在我的renderscript代码中有一个返回rs_allocation的函数,并且在某种程度上定义并使用了这样的函数:

rs_allocation gTmp1;
rs_allocation gTmp2;

static rs_allocation blur(float size) {
    if (some_criterion())
        return gTmp1;
    else
        return gTmp2;
}

...
rs_allocation tmp = blur(size);

将功能定义更改为以下后,错误消息消失,应用程序未崩溃,因为:

static bool blur(float size) {
    if (some_criterion())
        return false;
    else
        return true;
}

...
bool blurred = blur(size);
rs_allocation tmp = blurred ? gTmp2 : gTmp1;

现在问题是,为什么这有什么不同?毕竟rs_allocation被定义为rs_types.rsh中的int指针。因此,当函数返回rs_allocation时,不应该发生太多奇特,对吗?

0 个答案:

没有答案