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

代码向导 其他问答 1

我想用vector写一个加法程序,当相加的数大于6位时就会碰到这个问题。求大神解答!

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

回复

共2条回复 我来回复
  • 毕业设计驿站
    这个人很懒,什么都没有留下~
    评论

    导致你程序崩溃的原因是: 但是你使用了越界的索引去访问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;
    }
    
    0条评论
  • 代码驿站
    这个人很懒,什么都没有留下~
    评论

    你需要为vector预留足够的空间,在operation.cpp中加入代码:

    Integer add(Integer a,Integer b,unsigned int base)
    {
    Integer carry,sum;
    carry.reverse(20);//给carry预留空间,否则后面carry[i]将访问到不存在的索引。
    
    0条评论

发表回复

登录后才能评论