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++)
额外优化建议
- 代码中长参数匹配有误:当前写的是
"-solver",应该改为"--solver"(双横杠),否则无法正确识别--solver参数 - 手动解析命令行参数容易出错,建议使用标准库的
getopt或getopt_long工具,能更高效、规范地处理带长短选项的命令行参数
内容的提问来源于stack exchange,提问作者dloc1001001
相关产品推荐
相关产品推荐

