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

为何使用atoi()时GDB显示段错误,直接运行却正常?

为什么atoi(argv[1])在GDB中触发段错误,直接运行却正常?
  • 核心原因:GDB启动程序时未传入命令行参数,导致argv[1]为NULL指针。atoi内部会尝试解引用传入的指针,访问NULL指向的内存直接触发SIGSEGV段错误。
  • 直接运行无异常的真相:你直接运行程序时必然携带了参数(比如./wrapper 123),此时argc=2,argv[1]指向有效的字符串,atoi能正常处理。如果直接运行时也不带参数,程序同样会崩溃。
  • 从调试输出验证:GDB日志里明确显示main (argc=1, argv=0x7fffffffe288),argc=1说明仅存在程序名这一个参数,argv[1]必然是NULL;栈回溯中的nptr=0x0也直接证明atoi接收到了空指针。

修复建议

在使用argv[1]前先检查参数数量,避免空指针访问:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[]) {
    if (argc < 2) {
        fprintf(stderr, "错误:请传入命令行参数\n");
        return EXIT_FAILURE;
    }
    int testenum = atoi(argv[1]);
    // 后续逻辑
    return EXIT_SUCCESS;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 08:55:21