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
相关产品推荐
相关产品推荐

