作爲一個練習,我試圖在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