c++ 运行发生malloc(): memory corruption(fast)
其他问答
1
我想用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; }
-
你需要为vector预留足够的空间,在operation.cpp中加入代码:
Integer add(Integer a,Integer b,unsigned int base) { Integer carry,sum; carry.reverse(20);//给carry预留空间,否则后面carry[i]将访问到不存在的索引。
发表回复