C 堆栈溢出错误

C++ Stack Overflow Error

本文关键字:错误 栈溢出 堆栈      更新时间:2023-10-16

正在试图让自己习惯于与C 中的动态数组一起工作,而现在AM像今天的第十次一样被卡住了。该程序可以很好地编译,但是在输入输入后,它给出了堆栈溢出错误,并且我提供了删除构造函数中堆的功能,我以为我有一个未启发的变量,但我真的找不到。希望你们能帮助我检查一下。这是代码:

#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;

};

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)

除了上面提到的=/==问题外,看起来您正在递归计算Ackermann函数。此功能的递归深度增长得太快了,以至于无法这样做:" A(4,2)不可能通过在任何可拖动的时间内简单地递归应用Ackermann函数来计算。"

改用迭代方法,或者看回忆。

ackermann函数的值迅速增长,对于m>3,它将溢出您用于结果的int。那可能是无限递归的原因。