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

运行C++代码触发Segmentation Fault (SIGSEGV)错误,求排查解决

问题排查与修复

核心错误原因

  1. 无限递归触发栈溢出
    在solve函数的递归调用中,你传入的起始索引是i而非j+1:

    solve(v,ans,str,i); // 错误:始终从i开始,无法推进到字符串末尾
    

    这会导致递归永远无法终止,函数调用栈持续膨胀,最终触发Segmentation Fault (SIGSEGV)。

  2. 类名大小写不匹配
    main函数中实例化类时,将Solution写成了小写的solution:

    solution ob; // 错误:类名是Solution,C++对大小写敏感
    

    这会导致编译错误,若未修正会间接引发运行时异常。

修复后的完整代码

#include<bits/stdc++.h>
using namespace std;

class Solution{
public:
    // 优化:传const引用避免字符串拷贝
    bool isPalindrome(const string& str,int start,int end){
        while(start<end){
            if(str[start]!=str[end]) return false;
            start++;
            end--;
        }
        return true;
    }

    void solve(vector<string>& v,int &ans,const string& str, int i){
        if(i==str.length()){
            if(v.size()<ans) ans=v.size();
            return;
        }
        
        for(int j=i;j<str.length();j++){
            if(isPalindrome(str,i,j)) {
                v.push_back(str.substr(i,j-i+1));
                // 修正:递归起始索引改为j+1,推进处理进度
                solve(v,ans,str,j+1);
                v.pop_back();
            }
        }
    }

    int palindromicPartition(string str)
    {
        vector<string> v;
        int ans = INT_MAX;
        solve(v,ans,str,0);
        return ans-1;
    }
};

int main(){
    int t;
    cin>>t;
    while(t--){
        string str;
        cin>>str;
        // 修正:类名改为正确的Solution
        Solution ob;
        cout<<ob.palindromicPartition(str)<<"\n";
    }
    return 0;
}

额外优化提示

递归解法的时间复杂度为指数级,对于较长字符串会出现超时问题。可以改用动态规划优化:先预计算所有子串是否为回文,再通过DP数组记录每个位置的最小分割次数,大幅提升效率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 08:05:27