52981


下記の様なC構造体のポインターをRUSTで扱うにはどうすれば良いですか？

c code.

[code]

    typedef struct {
     int value;
    } DATA;
    
    DATA* new_data(){
      return (DATA*)malloc(sizeof(DATA));
    }
    void del_data(DATA* data){
      free(data);
    }
    
[/code]

下記の様に試したのですが、errorが取れません.

[code]

    malloc: *** error for object 0x700002fba9b0: pointer being freed was not allocated
    malloc: *** set a breakpoint in malloc_error_break to debug
    
[/code]

rust code

[code]

    #[repr(C)]
    pub struct DATA {
        count: u32
    }
    
    #[link(name = "clibrary", kind = "static")]
    extern "C" {
        fn new_data() -> *mut DATA;
        fn del_data(data: *mut DATA);
    }
    fn main(){
      unsafe{
        let raw = new_data();
        del_data(raw);
      }
    
[/code]


CC BY-SA 4.0
2019-02-23T02:53:40.950
52961
2019-02-23T19:52:57.703
32285
question
rust
C構造体のポインタをRUSTで扱うには


試行錯誤しているうちにC codeのnew_dataのreturn文が消えてしまっていました。  
returnが無くてもコンパイルが通ってしまいメモリ確保が行えずdel_dataにて  
クラッシュしていました。


CC BY-SA 4.0
2019-02-23T19:52:57.703
52981
2019-02-23T19:52:57.703
32285
52961
answer