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

C语言代码运行崩溃,抛出Segmentation fault (core dumped)错误求助

嘿,我帮你找出了导致这段C代码触发Segmentation fault (core dumped)的关键问题,咱们一步步拆解:

核心崩溃原因:数组越界访问

你定义了NUM_ADS=7,表示ADS数组应该有7个元素,但实际上你的数组里只有6个有效元素——问题出在第四个字符串的结尾:

"Mike:DWM DS likes trucks,sports and bieber"  // 这里漏掉了结尾的逗号!
"Peter:SAM likes chess,working out and art",

在C语言里,相邻的字符串字面量会被编译器自动拼接成一个完整的字符串。这就导致原本应该是两个独立元素的内容被合并成了一个,数组的实际元素数量从7变成了6。当你的程序尝试遍历到第7个元素(索引为6)时,就会访问数组边界外的非法内存,直接触发段错误。

其他需要修复的问题

除了导致崩溃的核心问题,还有两个小问题会影响程序正常运行:

  • 未完成的函数实现:sports_or_workout(char *s)只写了函数头,没有实现逻辑,这会导致编译失败。你可以根据需求补全,比如:
    int sports_or_workout(char *s) {
        // 示例逻辑:包含sports或者working out就返回真
        return strstr(s, "sports") || strstr(s, "working out");
    }
    
  • 数组初始化的不规范:建议在数组最后一个元素的末尾也加上逗号,这样后续新增元素时不容易漏掉逗号,减少类似问题的发生:
    char *ADS[]= {
        "William: SBM GSOH likes sports,TV,dining",
        "Matt:SWM NS likes art,movies,theater",
        "Luis:SLM ND likes books,theater,art",
        "Mike:DWM DS likes trucks,sports and bieber",  // 补上缺失的逗号
        "Peter:SAM likes chess,working out and art",
        "Josh:SJM likes sports,movie theatre",
        "Jed:DBM likes theater,books and dining",  // 末尾元素也加逗号
    };
    
修复后的验证

补全逗号和函数实现后,ADS数组的元素数量就和NUM_ADS一致了,程序再遍历数组时就不会出现越界访问,段错误的问题也就解决了。你可以正常调用sports_no_bieber和补全后的sports_or_workout函数来测试过滤逻辑。

内容的提问来源于stack exchange,提问作者Yuvraj Singh Johrawanshi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:48:17