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

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

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

导致你程序崩溃的原因是: 但是你使用了越界的索引去访问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;
}

是不是溢出了,超过65536,而Integer只能支持16位。

能单步调试么,看看问题是出在哪一行?应该能调出来吧

你需要为vector预留足够的空间,在operation.cpp中加入代码:
Integer add(Integer a,Integer b,unsigned int base)
{
Integer carry,sum;
carry.reverse(20);//给carry预留空间,否则后面carry[i]将访问到不存在的索引。