当前位置: 首页 > news >正文

一个由代码规范性导致的bug:结构体没有memset导致的Segmentation fault (core dumped)

目录

1 原始代码

2 修改后代码

3 其他类似的代码规范


1 原始代码

else if ("MIGRAPHX" == ort_ep) { OrtMIGraphXProviderOptions migraphx_options; migraphx_options.device_id = instance_group_device_id; migraphx_options.migraphx_fp16_enable=0; migraphx_options.migraphx_int8_enable=0; RETURN_IF_ORT_ERROR(ort_api->SessionOptionsAppendExecutionProvider_MIGraphX( soptions, &migraphx_options)); printf("model: %s ort_ep is ================ %s\n", (*model_path).c_str(), ort_ep.c_str()); }

报错

name is =============MIGRAPHX model: ./test_models_yolov7tiny/resnet_50/1/model.onnx ort_ep is ================ ROCM model: ./test_models_yolov7tiny/yolov5m/1/model.onnx ort_ep is ================ MIGRAPHX MIGraphX Error: /home/migraphx/src/file_buffer.cpp:38: generic_read_file: Failure opening file: name is =============MIGRAPHX

然后包段错误Segmentation fault (core dumped)了,

2 修改后代码

最终排查,修改代码为

else if ("MIGRAPHX" == ort_ep) { // MIGraphX Execution Provider OrtMIGraphXProviderOptions migraphx_options; memset(&migraphx_options, 0, sizeof(migraphx_options)); migraphx_options.device_id = instance_group_device_id; // 建议默认关闭 fp16 / int8,由模型显式控制 migraphx_options.migraphx_fp16_enable = 0; migraphx_options.migraphx_int8_enable = 0; RETURN_IF_ORT_ERROR( ort_api->SessionOptionsAppendExecutionProvider_MIGraphX( soptions, &migraphx_options)); LOG_MESSAGE( TRITONSERVER_LOG_VERBOSE, (std::string("MIGraphX Execution Provider is set for model '") + Name() + "' on device " + std::to_string(instance_group_device_id)) .c_str()); }

其实增加一行memset就可以解决了。因为里面的某些垃圾值导致的报错。

海康威视的代码规范性要求结构体必须memset,否则大组内邮件通报批评,现在理解了。

3 其他类似的代码规范

  • 变量声明时要进行初始化
  • 指针生命时要赋值NULL或nullptr
  • 结构体或者申请的内存,都要进行memset
  • 指针free之后要赋值为nullptr
  • 函数内部刚进去要对所有的参数进行规范性检查
  • 要对函数的返回值进行检查
  • ... ... ...
http://www.jsqmd.com/news/105658/

相关文章:

  • Emby媒体服务器界面定制化方案深度解析
  • 强力教程:3步掌握X-AnyLabeling中GeCO模型的目标计数技术
  • 基于树莓派nmcli详细使用,其它Linux应该差不多的
  • Cap开源录屏工具终极指南:5步快速上手专业录制
  • 2025最新国内电子签名排行:国内电子签名软件哪家强? - 博客万
  • 基于Springboot实现的校园订餐管理系统小程序设计与实现【源码+文档】
  • SystemInformer语言定制:从英文界面到多语言自由切换
  • 基于SSM实现的小说阅读小程序设计与实现【源码+文档】
  • RD-Agent:AI驱动的数据科学自动化革命
  • PdfiumViewer:高性能.NET PDF查看器完全指南
  • 为什么你应该选择FastExcel:5个让Excel处理效率翻倍的理由
  • buuctf中的not_the_same_3dsctf_2016
  • 终极指南:如何免费解锁Sidecar功能,让老旧iPad变身Mac副屏
  • 解锁AMD 780M全部潜能:ROCm优化库实战指南
  • RobotLab机器人强化学习平台完整使用指南
  • GEO 运营商哪家好?2025 年综合实力排名榜:全场景适配力 TOP5 揭晓
  • 手把手教你用SeedVR2实现本地化视频修复与增强
  • Vue3+Element Plus后台管理系统实战应用开发指南
  • ForensicsTool取证工具:从零开始的完整安装配置手册
  • 2025最新测评:SCIFIG科研绘图素材库,如何30分钟搞定“高颜值”SCI机制图
  • 2025最新测评:SCIFIG科研绘图素材库,如何30分钟搞定“高颜值”SCI机制图
  • 终极FreeMarker在线测试器:高效模板调试的免费神器
  • RuoYi-Vue3:现代化企业级后台管理系统开发框架深度解析
  • AI技术如何通过SSE框架提升开发效率与质量
  • 5步实现智能机器人云服务集成:从零到自动化的完整指南
  • CodeCombat游戏化编程教育的破局之道:从教学痛点走向技术赋能
  • OkHttp跨平台网络库:构建多端统一API的高性能连接管理方案
  • 【全球网络安全报告】哪些国家最脆弱?深度解析网络攻击数据与防御力
  • 基于Spring Boot充电桩共享服务管理系统设计与实现(完整源码+万字论文+精品PPT)
  • NanoPi R5S性能测试:开源固件网络加速终极方案