C 堆栈溢出错误
C++ Stack Overflow Error
正在试图让自己习惯于与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
。那可能是无限递归的原因。
相关文章:
- 为什么我在leetcode上收到AddressSanitizer:地址0x602000000058上的堆缓冲区溢出错误
- 在 leetcode 上提交解决方案时出现堆栈缓冲区溢出错误
- 我的 int main() 中出现堆栈溢出错误
- 使用 strcat 获取缓冲区溢出错误
- 如何修复此特征矩阵反演溢出错误?
- 如何修复递归函数导致的堆栈溢出错误?C++
- 没有 climits 库的溢出错误
- 当我尝试为结构分配新指针时出现堆栈溢出错误
- 我在c++中遇到了一个奇怪的错误,其中一个计算2个小整数加法的语句溢出到一个长值中
- 应该如何读取堆缓冲区溢出错误消息?
- 运行时错误:有符号整数溢出:964632435 * 10 无法在类型 'int' 中表示
- 我正在尝试使用回溯来解决 N queen 问题,但在编译时它会给出运行时错误(动态堆栈缓冲区溢出)
- 运行时错误:基0x000000000000溢出到0xffffffffffffffff的指针索引表达式 (basic_st
- 初始化数组并出现堆栈溢出错误
- 为什么 LeetCode 给出错误:地址清理器:堆缓冲区溢出
- 为什么错误 C6386 缓冲区溢出与 strsafe.h 字符串 Cch 函数
- 将 Vector<int> 推送到 Vector<vector 时出现堆溢出错误<int>>
- 分段错误:堆栈溢出
- 堆栈空间不足错误(堆栈溢出错误)
- c++中栈溢出和分段错误的危险