作为一个练习,我试图在Rust中编写一个GraphicsMagick FFI包装器。我有一个问题复制一些参考的C代码:GraphicsMagick FFI问题
Image
*image = (Image *) NULL;
ImageInfo
*imageInfo;
ExceptionInfo
exception;
InitializeMagick(NULL);
imageInfo=CloneImageInfo(0);
GetExceptionInfo(&exception);
这里是我的(幼稚)翻译防锈:
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
这是由引起的10。唯一的区别似乎是C异常没有被“初始化”,但我不知道C是否知道null和空/未初始化指针之间是否有区别。
完美,谢谢!我能够使用这个逐字记录。我没有意识到'std :: mem :: uninitialized()',但这是我错过了。也感谢链接相关的源代码 - –
不客气! ) – ArtemGr