在c++中添加int数组时,试图找出堆栈损坏的问题

Trying to figure out an issue with corrupted stack while adding int arrays in c++

本文关键字:堆栈 损坏 问题 c++ 添加 int 数组      更新时间:2023-10-16

我正在开发visual studio 2013,它的windows8 hp。我的代码试图添加两个大小为[20]的int数组并输出总和。我知道我在哪里,但我似乎找不到哪里。在转换函数中,我是每个数组的第一个数字,而我的答案[I]输出只有19位,而它应该是21位。

#include<iostream>
#include<string>
#include<cmath>
#include<cstring>
using namespace   std;
int globalnum[20];
int total[21];
int i;
void convert(char[], int);
void add(int[], int[], int);
void printAnswer(int[], int);
int   main()
{
   char n1[20];
   char n2[20];
   int num1[20];
   int num2[20];
   int answer[21];
   cin >> n1 >> n2;
   int l1 = strlen(n1);
   int l2 = strlen(n2);
   int  max = fmax(l1, l2);
   convert(n1, l1);
   for (int i = 0; i < max - 1; i++)
      num1[i] = globalnum[i];
   for (int i = 0; i < max; i++)
      cout << num1[i];
   cout << endl;

   convert(n2, l2);
   for (int i = 0; i < max - 1; i++)
      num2[i] = globalnum[i];
   for (int i = 0; i < max; i++)
      cout << num2[i];
   cout << endl;

   add(num1, num2, max);
   for (int i = 0; i < max - 1; i++)
      answer[i] = total[i];
   //  printAnswer(answer,max);
   for (int i = 0; i < max - 1; i++)
      cout << answer[i];
   return 0;
}
void convert(char c1[], int size)
{
   for (int i = 0; i < size - 1; i++)
      globalnum[i] = c1[size - 1 - i] - '0';
}
void  add(int add1[], int  add2[], int s1)
{
   int  sum[21];
   int remain = 0;
   for (i = 0; i < s1 - 1; i++)// This starts to add the numbers.
   {
      sum[i] = (add1[s1 - 1 - i] + add2[s1 - 1 - i] + remain) % 10;
      if (add1[s1 - 1 - i] + add2[s1 - 1 - i] + remain >= 10)
         remain = 1;
      else
         remain = 0;
      if (remain != 0)
         total[s1 - 1 - i] = 1;
      else total[s1 - 1 - i] = 0;
      total[s1 - 1 - i] = sum[i];
   }
   if (remain != 0)
      total[0] = 1;
}

//void printAnswer(int t[], int b)
// {
//  for (int i = b - 1; i < 0; i--)
//       cout << t[i];
//   }
//   cout << endl;
//}     

您的代码有太多问题,无法给出简单的答案。从工作代码向后工作可能更容易。你还没有完全说明问题,但这是我对你试图做的事情的最佳猜测:

#include <algorithm>
#include <iostream>
#include <iterator>
#include <string>
#include <vector>
using namespace std;
vector<int> toInts(const string& s) {
    vector<int> v(s.size());
    transform(cbegin(s), cend(s), begin(v), [](int c) { return c - '0'; });
    return v;
}
int main() {
    string a, b;
    cin >> a >> b;
    auto n = toInts(a);
    auto m = toInts(b);
    const auto size = max(n.size(), m.size());
    n.resize(size);
    m.resize(size);
    vector<int> sums(size);
    transform(cbegin(n), cend(n), cbegin(m), begin(sums), plus<>{});
    copy(cbegin(sums), cend(sums), ostream_iterator<int>{cout, ", "});
    cout << endl;
}