递归中的指针释放问题

本人尝试实现行列式的计算,使用递归函数,运用二级指针,写了一个析构函数。
但是在释放指针时候出现问题,提示访问冲突
个人猜测是在递归返回(return)时释放错了指针,但不知道如何修改析构函数

img

img

同时在产生此报错前还有一个报错,但被解决了:
cal函数中原本写的是volume,后来单步调试查局部变量发现volume一直是最大(递归最外层)的
determinant的volume。后来全部改为b.volume就好了。但是根据作用域,volume对应的是自己这一层的determinant,也就是说b.volume可以省略为volume呀,请问在递归时这是啥原因?

#pragma once
#include
#include
using namespace std;
template<class T>
class Determinant
{
public:
    Determinant(int a);
    T cal(Determinant a);
    ~Determinant();
    int** deptr;
private:
    int volume;
    int value;
};
template<class T>
Determinant::Determinant(int a)
{
    this->volume = a;
    this->deptr = new int* [volume];
    for (int i = 0;i < volume;++i)
    {
        deptr[i] = new int[volume];
    }
}
template<class T>
Determinant::~Determinant()
{
    for (int i = 0;i < volume;++i)
    {
        delete(deptr[i]);
    }
    delete(deptr);
}
template<class T>
T Determinant::cal(Determinant b)
{
    T sum = 0;
    for (int i = 0;i < b.volume;++i)
    {
        if (b.volume == 1)
        {
            return b.deptr[0][0];
        }
        Determinant c(b.volume - 1);
        for (int j = 0;j < i;++j)
        {
            for (int k = 0;k < b.volume - 1;++k)
            {
                c.deptr[j][k] = b.deptr[j][k + 1];
            }
        }
        for (int j = i+1;j for (int k = 0;k < b.volume - 1;++k)
            {
                c.deptr[j-1][k] = b.deptr[j][k + 1];
            }
        }
        sum += pow(-1, i + 2) * b.deptr[0][i] * cal(c);
    }
    return sum;
}

以下是Cpp文件


#include
#include
#include"matrix.h"
using namespace std;
int main()
{
    int n;
    cin >> n;
    Determinant<int> a(n);
    for (int i = 0;i < n;++i)
        for (int j = 0;j < n;++j)
            cin >> a.deptr[i][j];
    cout<cal(a);
    return 0;
}

希望各位帮我查出来运行时(递归)是怎么释放指针的及递归时作用域,把程序改对
本人首次提问,提问方法不熟,还请多多指教,谢谢啦!

在递归函数中,指针变量的释放应该在递归函数的最后一层(即最后一次调用递归函数的地方)进行,而不是在每一层都进行释放。这是因为,在递归函数中,每一层都是在上一层的基础上进行调用的,如果在每一层都进行指针释放,会导致上一层的指针变量无法正常使用,从而导致程序出错。

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^