Я пытаюсь привыкнуть к работе с динамическими массивами в C ++, и теперь я застрял, как в десятый раз сегодня. Программа компилируется нормально, но после ввода данных выдает ошибку переполнения стека, и я предоставил функциональность для удаления кучи в моем конструкторе, я предположил, что у меня есть неинициализированная переменная, но я действительно не могу ее найти. Надеюсь, вы, ребята, можете помочь мне проверить это. Это код:
#include<string>
#include<cmath>
#include<sstream>
using namespace std;
#include"Calc.h"#include<iostream>
using namespace std;
Calc::Calc(int a, int*b){
length=a;
ar=b;
AR =new int*[length];for (int i=0; i<length;i++){
AR[i] = new int [ar[i]]();
}
for (int i = 0; i < length; i++)
delete[] AR[i];
};
Calc::~Calc(){};
int Calc::solveFor(int m0, int n0){
int ans=0;
if (m0=0) {ans =n0+1; AR[m0][n0]=ans; return n0+1;}
if (n0=0) {ans= solveFor(m0-1,1); AR[m0][n0]=ans;return ans;}
else {ans=solveFor(m0-1, solveFor(m0, n0-1));AR[m0][n0]=ans; return ans;}
};void Calc::getSolved(){
for(int i=0; i<=length; i++){cout<<endl;
for (int j=0; j<ar[i]; j++)
cout<<"ACK ["<<i<<","<<j<<"]="<<AR[i][j]<<" ";}
cout<<endl;};
The Run.cpp:
#include<iostream>
#include<string>
#include "Calc.h"
using namespace std;
int main() {
int m;
int n;
int v[6]= {7, 7, 7, 7, 7, 7};
Calc XXX(6, v);
cin>>m;
cin>>n;XXX.solveFor(m,n);
XXX.getSolved();
return 0;
}
заранее спасибо.
Одна проблема, которую я вижу в Calc::solveFor
если вы используете оператор присваивания вместо равенства:
if (m0=0)
должно быть
if (m0==0)
Помимо проблемы = / ==, упомянутой выше, похоже, что вы вычисляете Функция Аккермана рекурсивно. Глубина рекурсии этой функции растет слишком быстро, чтобы сделать это следующим образом: «A (4, 2) не может быть вычислено простым рекурсивным применением функции Аккермана в любое время».
Вместо этого попробуйте итеративный подход или посмотрите на памятку.
Значение функции Аккермана растет очень быстро, и для m>3
это было бы переполнено int
который вы используете для результата. Это может быть причиной бесконечной рекурсии.