Pointers 引用的静态变量中的值错误

Pointers 引用的静态变量中的值错误,pointers,memory,rust,static,webassembly,Pointers,Memory,Rust,Static,Webassembly,我试图从WebAssembly模块中更新rust中的静态变量,该模块本身是用rust编写的 为了设置变量,我编写了一个函数init,并将其导出到WASM模块: static mut FILE_NAME:&str=”“; #[没有损坏] pub fn init(模型路径:*mut c_char){ let path=unsafe{CStr::from_ptr(model_path).to_str().unwrap()}; 不安全{ 文件名=路径; println!(“{}”,文件名); } }

我试图从WebAssembly模块中更新rust中的静态变量,该模块本身是用rust编写的

为了设置变量,我编写了一个函数
init
,并将其导出到WASM模块:

static mut FILE_NAME:&str=”“;
#[没有损坏]
pub fn init(模型路径:*mut c_char){
let path=unsafe{CStr::from_ptr(model_path).to_str().unwrap()};
不安全{
文件名=路径;
println!(“{}”,文件名);
}
}
然后我尝试从另一个导出的函数中访问它
load\u model

#[无损坏]
pub fn load_model()->*mut c_char{
让path=unsafe{&FILE_NAME};
println!(“{}”,路径);
//东西。。。
}
当使用指向
“/lib/python/iris\u knn.model”
的指针作为参数调用
init
函数,然后调用
load\u model
函数时,我会打印以下行:

lib/python/iris_knn.model
?4?on/iknn.mode
这当然不是我所期望的。这里有什么问题


顺便说一句,我知道这是一种不好的做法,但我更多地将其视为一种学习。

感谢@Cerberus的评论,我发现了自己的错误。在调用
init
之后,我立即释放了与传递的字符串关联的内存。从
load\u model
访问时,内存已释放且不再有效

以下是正确的主机运行时代码的摘录:

#。。。
实例=实例(模块、导入对象)
(file_ptr,file_len)=获取字符串_ptr('/lib/python/iris_knn.model',实例)
instance.exports.init(文件\u ptr)
#下一行错误,需要删除
#exports.deallocate(文件\ptr,文件\u len)
def load_模型():
output\u ptr=instance.exports.load\u model()
(output,output_len)=从_ptr获取_字符串(output_ptr,实例)
实例.exports.deallocate(输出\u ptr,输出\u len)
返回输出

字符串存储在哪里?当您调用
load\u model
时,它必须处于活动状态,这才是正确的提示。调用
init
后,我立即释放了与字符串关联的内存,因此在
load\u model
时它不再有效。谢谢!