Desol 2018-04-01 12:31 采纳率: 50%
浏览 8196
已采纳

c++ 运行发生malloc(): memory corruption(fast)

本人c++ 小白,要用vector写一个加法程序,当相加的数大于6位时就会碰到这个问题。求大神解答!
!图片说明
![图片说明

把两个数分别存在两个vector里,然后base是进制,通过vector,分别一位对应一位的相加出和。

  • 写回答

4条回答 默认 最新

  • wallesyoyo 2018-04-02 06:51
    关注

    导致你程序崩溃的原因是: 但是你使用了越界的索引去访问carry数组的元素。修改的话,可以把 carry[i+1] 的地方改为 carry.push_back();

    如下:

     for(int i=0;i<a.size();i++)
        {
            if(a[i]+b[i]>=base)
            {
                //carry[i+1] = 1;
                carry.push_back(1);
            }
            else
            {
                //carry[i+1] = 0;
                carry.push_back(0);
            }       
        }
    

    但是你在考虑进位方面是有逻辑错误的,比如9 + 999,你的结果就是错误的。我在你的基础上改了一下,你参考一下。

     Integer add(Integer a,Integer b,unsigned int base)
    {
        int len = std::max(a.size(), b.size());
        Integer sum = zeros_with_digits(len + 1);
    
        if (a.size() < b.size())
        {
            pad_front(a, b.size() - a.size());
        }
    
        if (a.size() > b.size())
        {
            pad_front(b, a.size() - b.size());
        }
    
        for (int i = len - 1; i >= 0; --i)
        {
            Digit sd = sum[i + 1] + a[i] + b[i];
    
            sum[i + 1] = sd % base;
            sum[i] = sd / base;
        }
    
        while(sum[0] == 0 && sum.size() > 1)
        {
            sum.erase(sum.begin());
        }
    
        return sum;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?