news 2026/2/16 10:01: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/2/15 18:52:27

基于Wan2.2-T2V-A14B开发定制化视频生成服务的可行性分析

基于Wan2.2-T2V-A14B开发定制化视频生成服务的可行性分析 在短视频日活破十亿、内容创作进入“秒级迭代”的今天&#xff0c;你有没有想过——一条高清广告片&#xff0c;可能只用一句话就生成了&#xff1f; 这不是科幻。当AIGC浪潮从图文涌向动态视觉&#xff0c;文本到视频…

作者头像 李华
网站建设 2026/2/15 2:13:18

【MCP续证冲刺必备】:Agent开发考核高频考点与避坑策略

第一章&#xff1a;MCP续证Agent开发考核概述在MCP&#xff08;Microsoft Certified Professional&#xff09;续证体系中&#xff0c;Agent开发考核是验证开发者对自动化代理系统设计与实现能力的重要环节。该考核聚焦于候选人在分布式环境下的任务调度、状态管理与通信机制等…

作者头像 李华
网站建设 2026/2/7 12:16:28

当Gemini 3.0横空出世,DeepSeek-V3.2如何用开源打破垄断?

简介 DeepSeek-V3.2以开源路线对抗国际巨头&#xff0c;通过DSA稀疏注意力机制、可扩展GRPO训练框架和大规模合成Agent数据集三大创新&#xff0c;实现性能追平Gemini 3.0 Pro但价格仅为1/5。文章介绍了其技术突破、实战表现及开源战略意义&#xff0c;承认仍有约10%差距但正在…

作者头像 李华
网站建设 2026/2/7 12:58:25

剪辑er必备!30个免费无版权音乐素材网站(2025年12月整理)

剪辑视频时&#xff0c;商用无版权的纯音乐、音效素材始终是刚需&#xff01;今天整理了国内外 30 个高性价比音频素材网站&#xff0c;涵盖免费商用、日系 BGM、特效音效等全场景&#xff0c;分类清晰、下载便捷&#xff0c;剪辑师、自媒体人直接收藏备用&#xff5e;1. 曲多多…

作者头像 李华