为什么此代码中存在分段错误[已关闭]

问题描述 投票:0回答:1

我正在编写一个简单的代码来计算大数的阶乘。我没有发现任何超出范围的内容,但仍然出现分段错误。如果您看到什么,请告诉我。

class Solution {
public:
    vector<int> factorial(int N){
        
        vector<int> fact;
        
        fact.push_back(1);
        
        for(int i=2; i<=N; i++){
            int carry=0;
            int j;
            for(j=0; j<fact.size(); j++){
                int val = fact[j]*i + carry;
                fact[j] = val%10;
                carry = val/10;
            }
            if(carry!=0){
                fact[j] = carry;
            }
        }
        reverse(fact.begin(), fact.end());
    }
c++ algorithm vector segmentation-fault
1个回答
1
投票

您未能将结果

push_back
变为
fact
,这意味着它将始终保持在大小“1”。

此外,在第一次循环之后,您的

j
将具有
1
的值(循环的最后一次迭代中的
0
),导致您在检查向量时访问“不存在”索引进位(在循环之外)。

© www.soinside.com 2019 - 2024. All rights reserved.