我有一个在堆栈上实例化“SkPath”对象的函数。之后我调用了一些函数,例如“moveTo”,“lineTo”,“cubicTo”(它只是在SkPath对象内部向内部数组添加新点)。然后我在堆栈上实例化“SkPaint”类的对象。
然后我调用“SkCanvas”对象的“drawPath”函数,并将SkPath和SkPaint对象作为args传递,然后崩溃。
我做了一些调查。事实证明,SkPath中的数组不再有效,因为SkPaint的构造函数通过调用sk_bzero(this, sizeof(*this));
(“memset”为0来表示“指针”大小为“*指针”)来使其(SkPaint)对象为空这也以某种方式清理指向属于以前声明的SkPath对象的数组的指针。
我已经在SkPath之前通过实例化SkPaint修复了它,但问题仍然存在,因为我还有更多类似于这个问题的问题......我想知道发生了什么。 相同的代码在Android 2.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