当前位置: 首页 > 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.gsyq.cn/news/116579.html

相关文章:

  • 基于树莓派nmcli详细使用,其它Linux应该差不多的
  • 2025最新国内电子签名排行:国内电子签名软件哪家强? - 博客万
  • PdfiumViewer:高性能.NET PDF查看器完全指南
  • RD-Agent:AI驱动的数据科学自动化革命
  • buuctf中的not_the_same_3dsctf_2016
  • 终极指南:如何免费解锁Sidecar功能,让老旧iPad变身Mac副屏
  • RobotLab机器人强化学习平台完整使用指南
  • RuoYi-Vue3:现代化企业级后台管理系统开发框架深度解析
  • 【全球网络安全报告】哪些国家最脆弱?深度解析网络攻击数据与防御力
  • CodeCombat游戏化编程教育的破局之道:从教学痛点走向技术赋能
  • NanoPi R5S性能测试:开源固件网络加速终极方案
  • 从兼容到超越:金仓数据库开启三重革新新纪元!
  • 云服务器入门指南——从概念到选型的完整解析
  • OpenUtau终极指南:5步快速掌握免费音乐合成平台
  • EmotiVoice语音呼吸感模拟技术增加真实度
  • EmotiVoice在生日祝福语音中的欢快演绎
  • EmotiVoice能否用于远程医疗语音通知系统?HIPAA合规考量
  • 企业级语音项目首选:EmotiVoice高性能TTS引擎
  • XVim终极使用指南:掌握Xcode中的Vim编辑技巧
  • 如何快速构建跨平台移动应用:yudao-cloud + UniApp 终极实践指南
  • React 的位掩码标记系统
  • JAVA基于多线程机制的理解
  • 视频体积减少94.39%,极致视频压缩软件,纯本地离线免费用!秒杀小丸工具箱,支持Win/Mac CompressO
  • BiliPlus终极指南:重新定义你的B站观看体验
  • 直播场景中的语音创新:用EmotiVoice生成实时互动语音
  • EmotiVoice语音合成多区域部署架构设计
  • 41、Linux 服务器邮件过滤与安全防护指南
  • 调用nt!KiExitDispatcher的又一个函数nt!KeInsertQueueApc和nt!KiProcessDeferredReadyList函数分析和全局变量nt!KiIdleSummar
  • Hslcommunication
  • Ditto剪贴板管理器完整使用指南:从新手到高手的快速上手教程