Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/195.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在蜂巢上使用skia绘图时内存崩溃_C++_Android_Android Ndk_Android 3.0 Honeycomb_Skia - Fatal编程技术网

C++ 在蜂巢上使用skia绘图时内存崩溃

C++ 在蜂巢上使用skia绘图时内存崩溃,c++,android,android-ndk,android-3.0-honeycomb,skia,C++,Android,Android Ndk,Android 3.0 Honeycomb,Skia,我有一个在堆栈上实例化“SkPath”对象的函数。在此之后,我调用了一些函数,如“moveTo”、“lineTo”、“cubicTo”(这只是将新点添加到SkPath对象内部的内部数组中)。然后我在堆栈上实例化“SkPaint”类的对象 然后调用“SkCanvas”对象的“drawPath”函数,并将SkPath和SkPaint对象作为args传递,然后崩溃 我做了一些调查。结果表明,SkPath中的数组不再有效,因为SkPaint的构造函数正在通过调用sk_bzero(this,sizeof(

我有一个在堆栈上实例化“SkPath”对象的函数。在此之后,我调用了一些函数,如“moveTo”、“lineTo”、“cubicTo”(这只是将新点添加到SkPath对象内部的内部数组中)。然后我在堆栈上实例化“SkPaint”类的对象

然后调用“SkCanvas”对象的“drawPath”函数,并将SkPath和SkPaint对象作为args传递,然后崩溃

我做了一些调查。结果表明,SkPath中的数组不再有效,因为SkPaint的构造函数正在通过调用
sk_bzero(this,sizeof(*this)),使其(SkPaint的)对象为空(“memset”为0表示大小为“*指针”的“指针”),通过这样做,它还以某种方式清除指向数组的指针,该数组属于先前声明的SkPath对象

我已经通过在SkPath之前实例化SkPaint修复了它,但问题仍然存在,因为我没有更多类似于此的问题,而且。。。我想知道发生了什么事。 同样的代码在Android2.2上也可以正常工作

我没有使用硬件加速

SkPath skPath;  
skPath.setFillType(fillType);
skPath.moveTo(x1, y1);
skPath.cubicTo(x1, y1, x2, y2, x3, y3);
skPath.lineTo(x1, y1);
skPath.close();

SkPaint paint; //<- will call constructor that cleans up pointer to array

paint.setAntiAlias(true);
GfxRGB rgb;
state->getFillRGB(&rgb);
paint.setColor(GfxRGB2SkColor(rgb));
paint.setStyle(SkPaint::kFill_Style);
paint.setAlpha((U8CPU) (state->getFillOpacity() * 255));

canvas->drawPath(skPath, paint); // <- will crash here
SkPath-SkPath;
skPath.setFillType(fillType);
skPath.moveTo(x1,y1);
立方(x1,y1,x2,y2,x3,y3);
skPath.lineTo(x1,y1);
skPath.close();
油漆//getFillRGB(&rgb);
油漆颜色(GfxRGB2SkColor(rgb));
油漆.设置样式(SkPaint::kFill_样式);
setAlpha((U8CPU)(state->getFillOpacity()*255));

画布->绘图路径(skPath,绘制);//您没有显示
canvas
是如何初始化的-它可以为空吗?另外,您正在使用object
skPath
,但将
path
传递给
drawPath
,因此这要么无法编译,要么遗漏了重要的细节。此外,如果您尝试在SkPoint实例化之后立即调用getPoints,将引发异常。它是否可能与Motorolla Xoom硬件架构有关?可能是因为双核处理器?@Mat No,“canvas”初始化正确。正如我之前提到的,如果在SkPath之前初始化SkPaint,它就会工作。根据“路径”而不是“skPath”,我在复制粘贴时错误地将其留在了那里。对不起,您没有显示如何初始化画布,它可以为空吗?另外,您正在使用object
skPath
,但将
path
传递给
drawPath
,因此这要么无法编译,要么遗漏了重要的细节。此外,如果您尝试在SkPoint实例化之后立即调用getPoints,将引发异常。它是否可能与Motorolla Xoom硬件架构有关?可能是因为双核处理器?@Mat No,“canvas”初始化正确。正如我之前提到的,如果在SkPath之前初始化SkPaint,它就会工作。根据“路径”而不是“skPath”,我在复制粘贴时错误地将其留在了那里。很抱歉