堆块修改了过去的C ++中的请求错误

问题描述

我有一个类为Solver的QT应用程序,它解决了一些数值问题(通过查找多项式分布到三项式来找到多项式根的Bairstow方法),但是对于较小的实例(5个参数,在数组{{1中}})工作正常,但是当我尝试使用较大的实例(7个参数)时,应用程序崩溃了。 运行调试器后,我收到以下消息: tabA 我不确定到底是怎么回事(嗯,我想我会堆栈溢出,但是我不确定在哪里和如何),但是它指向第Heap block at 02989F58 modified at 02989F80 past request 20行,这是调试器指出的方式:

enter image description here

这是该类方法代码错误发生在主方法delete[] Q; delete[] W;中,该方法在类字段上工作并返回数字,指示找到解决方案,不存在或在给定的迭代次数中找不到该数字) ) 这是主要方法

int Bairstow(*parameters*)

和两种帮助方法

  1. 用于多项式除法(按三项式x ^ 2-px-r)
int solver::Bairstow(int stopien,double const *tabA,double *tabP,double *tabR,double eps,int N,double p_,double r_)
{
    int i,q,Iter,indpziel=0;
    i=stopien; 

    while(i>=0 && tabA[i]==0) 
    {
        i--;
    } 

    if (i<2) { return 1; } 

    double *A=new double[stopien +1]
    for (i=0;i<=stopien;i++)
    {
        A[i]=tabA[i];
    }
    double *Q=new double[stopien-1 +1];
    double *w=new double[stopien-3 +1];
    double Reszta[2]; 
    double dqdp[2],dqdr[2]; 
    double p,r,a,b,c,d;
    while (stopien>=2) 
    {
        p=p_,r=r_; 
        Iter=O;
        do
        {
            PodzielWiel(stopien,A,p,Q,Reszta);
            if (fabs(Reszta[1])<eps && fabs(Reszta[0])<eps)
            {
                break; 
            }
            
            PodzielWiel(Stopien-2,W,dqdr); 
            for (i=Stopien-2;i>=0;i--)
            {
                Q[i+1]=Q[i];
            }
            Q[0]=0; 
            PodzielWiel(Stopien-1,dqdp); 
            q=LiczMOdwrotna(dqdp[0],dqdr[0],dqdp[1],dqdr[1],d);
            if (q==1) 
            { 
                delete[] Q; 
                delete[] W;
                return 2;
            }
            p = p-(a*Reszta[0]+b*Reszta[1]); 
            r = r-(c*Reszta[0]+d*Reszta[1]); 
        } while (++Iter<N);
        if (Iter==N) return 3; 

        tabP[IndDziel]=p;
        tabR[IndDziel]=r;
        IndDzieL++;
        Stopien-=2;
        for (i=0;i<=Stopien;i++)
        {
            A[i]=Q[i];
        } 
    }
    delete[] Q; delete[] W; //that's the line debugger pointed to
    return 0; 
}
  1. 用于反转2x2矩阵(前4个参数为输入,后4个参数为输入):
int solver::PodzielWiel(int stopien,double p,double r,double *Q,double *R) 
{ 
    if (Stopien<O) return 1; 
    
    int i;
    for (i=0;i<=stopien-2;i++)
    { 
        Q[i]=0;
    }

    while (stopien>=0 && tabA[stopien]==0)
    {
        stopien--; 
    }
    if (stopien<2)
    {
        R[0]=tabA[0];
        R[1]=tabA[1]; 
        return 0;
    }

    double *A=new double[Stopien +1]; 
    for (i=0;i<=stopien;i++)
    {
        A[i]=tabA[i];
    }
    Q[stopien-2]=A[stopien];
    if (stopien>2)
    {
        for(i=stopien; i>1; i--)
        {
            Q[i-2]=A[i];
            A[i-1]+=Q[i-2]*p;
            A[i-2]+=Q[i-2]*r; 
        }
        R[1]=A[1];
        R[0]=A[0] ; 
    }
    else
    { 
        R[1]=A[1]+P*Q[0] ;
         R[0]=A[0]+r*Q[0] ; 
    }
    delete [] A; 
    return 0; 
} 
 

担心格式可能不正确,但我不得不使用OCR软件,因为不可能从QT Creator中进行复制...即使在资源管理器中使用show之后,在新的本地化中将文件另存为txt(以使其在QT Creator外部可见),然后再做一次...我仍然无法复制任何内容...

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...