You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++程序传入-d/-s参数触发Segmentation Fault:11求助

问题排查:命令行参数处理导致的Segmentation Fault

核心错误原因

代码触发段错误的直接原因是命令行参数循环越界访问:

for (int i = 1; i <= argc; i++)

C++中argv数组的有效下标范围是0到argc-1(argc表示参数总数,包含程序自身的名称)。以输入file -d为例,argc=2,循环会执行i=1和i=2:

  • i=1时,argv[1]是有效参数"-d",所以cout内容能正常打印
  • i=2时,argv[2]是空指针,尝试将空指针赋值给std::string会触发非法内存访问,直接导致Segmentation fault: 11

修复方案

将循环条件修改为i < argc,确保只访问有效参数:

for (int i = 1; i < argc; i++)

额外优化建议

  1. 代码中长参数匹配有误:当前写的是"-solver",应该改为"--solver"(双横杠),否则无法正确识别--solver参数
  2. 手动解析命令行参数容易出错,建议使用标准库的getopt或getopt_long工具,能更高效、规范地处理带长短选项的命令行参数

内容的提问来源于stack exchange,提问作者dloc1001001

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 14:01:06