You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter中创建不同初始化值的PixelMatching实例状态异常问题

问题排查与解决思路

1. 检查PixelMatching类的状态隔离逻辑

如果这个类的C实现或dart封装里用了静态全局变量存储源图像特征、OpenCV检测器这类核心数据,所有实例会共享同一份状态。比如C侧定义了全局的cv::Ptr<cv::ORB>检测器,每个实例创建时未重新初始化,那不管你创建多少个dart实例,实际都在复用同一份C++资源,自然会出现两个实例都用第一张图的情况。

2. 确认初始化时的图像参数确实不同

别只看代码路径,实际打印两个初始化时传入图像的哈希值、文件路径,确认传给两个实例的是不同图像。比如会不会不小心把同一张图的路径传给了第二个实例,或是图像加载失败后默认 fallback 到了第一张图。

3. 排查FFI绑定的对象创建逻辑

用FFI调用C时,每个dart实例必须对应C侧独立的对象实例:

  • 如果C侧是单例实现,那不管你在dart里创建多少个实例,实际都指向同一个C对象,状态必然共享
  • 检查dart侧的PixelMatching构造函数,是否正确调用了C++的构造函数(比如通过allocate分配独立内存、调用new PixelMatching()),而非复用同一个指针

4. 验证调用时确实使用了不同实例

在调用两个实例的匹配方法时,打印实例的hashCode,确认每次调用的是不同对象。比如会不会是代码写错了,把第一个实例赋值给了第二个变量,导致两个变量指向同一个实例?


内容的提问来源于stack exchange,提问作者confumbit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 16:22:38