【发布时间】:2015-11-06 22:54:30
【问题描述】:
作为一个练习,我正在尝试用 Rust 编写一个 GraphicsMagick FFI 包装器。我在复制一些参考 C 代码时遇到问题:
Image
*image = (Image *) NULL;
ImageInfo
*imageInfo;
ExceptionInfo
exception;
InitializeMagick(NULL);
imageInfo=CloneImageInfo(0);
GetExceptionInfo(&exception);
这是我对 Rust 的(天真)翻译:
let img: *mut ffi::Image;
let img_info: *mut ffi::ImageInfo;
let exception: *mut ffi::ExceptionInfo = ptr::null_mut();
unsafe {
ffi::InitializeMagick(ptr::null_mut());
img_info =
ffi::CloneImageInfo(ptr::null_mut() as *const ffi::ImageInfo);
ffi::GetExceptionInfo(exception);
// ...
}
这编译得很好,但是当我尝试运行它时,我看到了:
magick/error.c:388: GetExceptionInfo: Assertion `exception != (ExceptionInfo *) ((void *)0)' failed
这是由ffi::GetExceptionInfo(exception) 引起的。唯一的区别似乎是 C 异常没有“初始化”,但我对 C 的了解还不够,无法知道 null 和空/未初始化的指针之间是否存在差异。
【问题讨论】: