取消引用从Rust传递到C的类型定义指针时出现SEGFULT

取消引用从Rust传递到C的类型定义指针时出现SEGFULT,rust,segmentation-fault,ffi,Rust,Segmentation Fault,Ffi,我正在尝试为一个现有的C项目编写一个Rust插件模块。我一直在为C项目编写Rust绑定,因为我需要它们,而我的最新版本每次都抛出一个segfault,不管我如何尝试与它交互 这是我绑定到的C函数签名: switch_xml_t switch_xml_open_cfg(常量字符*文件*路径,switch_xml_t*节点,switch_事件*参数) { 开关\u xml\u t xml=NULL,cfg=NULL; *node=NULL;//pub-type-switch\u-xml\u t=sw

我正在尝试为一个现有的C项目编写一个Rust插件模块。我一直在为C项目编写Rust绑定,因为我需要它们,而我的最新版本每次都抛出一个segfault,不管我如何尝试与它交互

这是我绑定到的C函数签名:

switch_xml_t switch_xml_open_cfg(常量字符*文件*路径,switch_xml_t*节点,switch_事件*参数)
{
开关\u xml\u t xml=NULL,cfg=NULL;
*node=NULL;//
pub-type-switch\u-xml\u t=switch\u-xml;
不等于

typedef struct switch\u xml*switch\u xml\t;
这个typedef隐藏了一个指针。我真的不推荐这种风格——一个原因是为什么会存在这个问题

锈蚀面应为:

#[允许(非驼峰类型)]
pub-type-switch_-xml_-t=*mut-switch_-xml;
pub-type-switch\u-xml\u t=switch\u-xml;
不等于

typedef struct switch\u xml*switch\u xml\t;
这个typedef隐藏了一个指针。我真的不推荐这种风格——一个原因是为什么会存在这个问题

锈蚀面应为:

#[允许(非驼峰类型)]
pub-type-switch_-xml_-t=*mut-switch_-xml;

@Stargateur
switch\u xml\u t
只是
switch\u xml
@Shepmaster上的一个类型别名,它正在编译为动态库,因为它只是在运行时由C-project加载的。我不知道如何在没有我试图为其编写插件模块的大型C-project的情况下制作MCVE。@Stargateur这两个变量都没有引起问题。这就是C代码中的s-我无法控制它,并且在使用C.Update编写的其他插件模块时可以正常工作。我不是说我比你更了解它,我只是说segfault来自后面的一行,它没有引用这两个变量中的任何一个。@Stargateur
switch\u xml\t
只是
switch上的一个类型别名_xml
@Shepmaster它是作为动态库编译的,因为它只是在运行时由C-project加载的。我不知道如何在没有我正试图为之编写插件模块的大型C-project的情况下制作MCVE。@Stargateur这两个变量都没有引起问题。这是在C-code中-我无法控制,并且在使用其他p时工作正常lugin模块是用C.updated编写的。我并不是说我比你更了解,我只是说segfault来自后面的一行,它没有引用这两个变量中的任何一个。谢谢。我也不喜欢它,我只是编写与C代码匹配的绑定exactly@toadzky你知道自动工具存在吗?是的,我试过了唱出来,但没用。我不是一个足够的c或rust开发人员,无法理解出了什么问题。我会再试一次,看看是否能收到错误消息。谢谢。我也不喜欢它,我只是编写绑定来匹配c代码exactly@toadzky你知道自动工具存在吗?是的,我试过用它,但没用。我还不够我将再试一次,看看是否能得到一条错误消息
pub type switch_xml_t = switch_xml;