news 2026/4/16 16:15:20

记录va_list重复使用导致的crash

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
记录va_list重复使用导致的crash

博主介绍:程序喵大人

  • 35 - 资深C/C++/Rust/Android/iOS客户端开发
  • 10年大厂工作经验
  • 嵌入式/人工智能/自动驾驶/音视频/游戏开发入门级选手
  • 《C++20高级编程》《C++23高级编程》等多本书籍著译者
  • 更多原创精品文章,首发gzh,见文末
  • 👇👇记得订阅专栏,以防走丢👇👇
    😉C++基础系列专栏
    😃C语言基础系列专栏
    🤣C++大佬养成攻略专栏
    🤓C++训练营
    👉🏻个人网站

背景

最近遇到了个奇怪的问题,同样的代码,在Windows 下正常运行,在iOS下必现crash。

异常代码如下:

std::stringStringPrintf(constchar*format,...){va_list ap;va_start(ap,format);char*buffer=nullptr;constsize_t size=std::vsnprintf(nullptr,0,format,ap)+1;buffer=newchar[size];std::vsnprintf(buffer,size,format,ap);va_end(ap);std::stringresult(buffer);delete[]buffer;returnresult;}

经过分析定位后发现,这里重复使用了va_list并且在vsnprintf后还继续使用了ap,进而导致的crash。

通过查看文档:https://port70.net/~nsz/c/c11/n1570.html#7.21.6.8

这里明确说明,arg在vsnprintf后,会变成不确定的状态。所以才有了在Windows上可以正常运行,在iOS上会异常退出的问题。

如何解决这个问题?

标准做法是使用va_copy复制一份va_list,如下:

std::stringStringPrintf(constchar*format,...){va_list ap,ap_copy;va_start(ap,format);va_copy(ap_copy,ap);constint32_tsize=std::vsnprintf(nullptr,0,format,ap)+1;va_end(ap);if(size<=0){return"";}char*buffer=newchar[size];std::vsnprintf(buffer,size,format,ap_copy);va_end(ap_copy);std::stringresult(buffer);delete[]buffer;returnresult;}

以前都是直接使用的三方库StringPrintf,而没有自己实现。这也算是使用vsnprintf过程中遇到的一个小坑,在此分享记录一下。

码字不易,欢迎大家点赞,关注,评论,谢谢!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 7:21:45

【推荐系统】深度学习训练框架(十六):模型并行——推荐系统的TorchRec和大语言模型的FSDP(Fully Sharded Data Parallel)

&#x1f4e6; 第一部分&#xff1a;TorchRec 实战教程 TorchRec是PyTorch的领域库&#xff0c;专为大规模推荐系统设计。其核心是解决超大规模嵌入表在多GPU/多节点上的高效训练问题。 1. 安装与环境配置 首先安装TorchRec及其依赖。推荐使用CUDA环境以获得最佳性能。 # 1.…

作者头像 李华
网站建设 2026/4/16 7:20:52

Dify Custom Tool 调用超时问题排查与解决方案(claude-4.5-opus-high)

在使用 Dify 的 Custom Tool&#xff08;自定义工具&#xff09;功能调用外部 API 时&#xff0c;你是否遇到过这样的问题&#xff1a; 工具调用反复重试&#xff0c;日志中出现多次相同请求API 明明执行成功了&#xff0c;但 Dify 显示超时失败复杂的 AI 处理流程总是在中途断…

作者头像 李华
网站建设 2026/4/16 7:21:49

day123—二分查找—H 指数 II(LeetCode-275)

题目描述 给你一个整数数组 citations &#xff0c;其中 citations[i] 表示研究者的第 i 篇论文被引用的次数&#xff0c;citations 已经按照 非降序排列 。计算并返回该研究者的 h 指数。 h 指数的定义&#xff1a;h 代表“高引用次数”&#xff08;high citations&#xff…

作者头像 李华
网站建设 2026/4/16 7:22:13

从零搭建VSCode量子作业监控面板:3小时快速上手教程,错过等于落伍

第一章&#xff1a;VSCode 的量子作业监控面板在现代量子计算开发中&#xff0c;可视化与实时监控是提升调试效率的关键。VSCode 通过扩展插件架构&#xff0c;支持集成定制化的量子作业监控面板&#xff0c;使开发者能够在编码环境中直接观察量子电路执行状态、资源分配及任务…

作者头像 李华
网站建设 2026/4/16 7:20:45

【收藏必备】2023年大模型转型完全指南:从零入门到就业的全方位攻略

这篇文章提供了大模型领域从零到就业的全面转型攻略&#xff0c;包括明确职业方向、掌握基础知识、深入学习大模型技术、参与实践项目、加入开源社区、利用学习资源以及职业发展建议等内容。文章不仅提供了技术学习路径&#xff0c;还包含了职业规划和持续学习的方法&#xff0…

作者头像 李华
网站建设 2026/4/16 9:04:08

基于大数据挖掘技术的台风灾害预测系统(毕业设计项目源码+文档)

课题摘要 基于大数据挖掘技术的台风灾害预测系统&#xff0c;直击台风灾害防控 “数据来源分散、预测模型单一、预警响应滞后” 的核心痛点&#xff0c;依托 HadoopSparkTensorFlow 大数据挖掘技术体系&#xff0c;构建 “多源数据融合 智能模型预测 可视化预警赋能” 的一体…

作者头像 李华