我正在为node编写imagemagick扩展,当我尝试将blob保存到缓冲区时,出现 Segmentation fault 。
using Magick::Blob;
using v8::MaybeLocal;
using v8::Object;
Isolate *isolate = args.GetIsolate();
NodeMagick *obj = ObjectWrap::Unwrap<NodeMagick>(args.Holder());
Blob blob;
obj->image.write(&blob);
MaybeLocal<Object> buffer = node::Buffer::New(isolate, (char *)blob.data(), node::encoding::UTF8);
如果我打印出Blob,我会得到一些数据,尽管不是全部...
printf((char*)blob.data());
// Displays:
// ëPNG
我不确定为什么会这样。我的数据没有完全保存到Blob吗?
如果我将obj->image.write(&blob);
更改为obj->image.write("out.png");
并删除buffer = ...
,则文件创建并可见,那么Blob在这里我会丢失什么?
答案 0 :(得分:1)
正如评论中指出的那样,您需要告诉Node的Buffer
Blob大小有多大。
Blob blob;
obj->image.write(&blob)
MaybeLocal<Object> buffer = node::Buffer::Copy(isolate,
(char *)blob.data(),
blob.length());
查看node_buffer.h
文件,使用node::Buffer::Copy
构造函数可能更合适,否则在释放过程中可能会有其他错误。