news 2026/8/21 11:32:51

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
一个由代码规范性导致的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
  • 函数内部刚进去要对所有的参数进行规范性检查
  • 要对函数的返回值进行检查
  • ... ... ...
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/21 3:40:53

Memobase用户记忆系统:5分钟快速搭建AI长期记忆库完整指南

Memobase用户记忆系统:5分钟快速搭建AI长期记忆库完整指南 【免费下载链接】memobase Profile-Based Long-Term Memory for AI Applications 项目地址: https://gitcode.com/gh_mirrors/me/memobase Memobase是一款革命性的用户记忆系统,专为AI应…

作者头像 李华
网站建设 2026/8/21 0:43:53

前端图片水印神器:watermark.js完全指南 [特殊字符]

在当今数字化时代,前端图片水印已成为保护图片版权的必备技术。作为一款纯浏览器端的水印处理库,watermark.js让开发者能够轻松实现浏览器水印功能,无需依赖任何服务器端处理。本教程将带你从零开始掌握这个强大的工具。 【免费下载链接】wat…

作者头像 李华
网站建设 2026/8/21 1:04:55

低代码不止省开发时间:重构企业数字化转型的成本结构

引言:跳出“工具思维”,看见低代码的成本革命不少企业误将低代码仅视为“缩短开发周期的工具”,却忽视其重构数字化转型成本结构的核心价值。面对“转型投入高、回报慢”的困境,低代码正以全链路成本优化能力,打破传统…

作者头像 李华
网站建设 2026/8/21 0:44:01

Cursor免费试用重置完全指南:告别设备限制困扰

Cursor免费试用重置完全指南:告别设备限制困扰 【免费下载链接】go-cursor-help 解决Cursor在免费订阅期间出现以下提示的问题: Youve reached your trial request limit. / Too many free trial accounts used on this machine. Please upgrade to pro. We have th…

作者头像 李华
网站建设 2026/8/22 1:09:55

Unity游戏开发架构完整指南:依赖注入与高内聚低耦合设计实战

Unity游戏开发架构完整指南:依赖注入与高内聚低耦合设计实战 【免费下载链接】Zenject 项目地址: https://gitcode.com/gh_mirrors/zen/Zenject 在Unity游戏开发中,如何构建可维护、可扩展且易于测试的代码架构是每个团队都面临的挑战。传统开发…

作者头像 李华