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

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条)

报告相同问题?

悬赏问题

  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化
  • ¥15 Mirare PLUS 进行密钥认证?(详解)
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
  • ¥20 想用ollama做一个自己的AI数据库
  • ¥15 关于qualoth编辑及缝合服装领子的问题解决方案探寻
  • ¥15 请问怎么才能复现这样的图呀