百科知识

急需帮助,有关错误问题!!!我编译的时候没有任何问题,但是程序在

2011-04-03 16:09:21
我编译的时候没有任何问题,但是程序在执行时,会出现异常中止~~~~~~有时候又会出现下面的错误DebugAssertionFailed!Program:****. :1044Expression:_CrtIsValidHeapPoint(pUserData)Forinformationonhowyourprogramcancauseanassertionfailure,seetheVisualC++documentationonasserts我的程序是实现两种模幂算法,如果输入的数较小就不会出现错误#include<iostream>#include<cmath>usingnamespacestd;classcaculator{ (intx,inty,intz){a=x;m=y;n=z;k=getbit(m)-1;m_array=binary(m);}intgetbit(intn);int*binary(intm);voidcacul_2_1();voidcacul_2_2();~caculator(){} ,m,n,k;int*m_array;};intcaculator::getbit(intm){if(m==0||m==1)return1;returngetbit(m/2)+1;}int*caculator::binary(intm){int*p;p=newint(k+2);for(inti=0;i<k+1;i++)p[i]=(m>>i)&1;p[k+1]=0;returnp;}voidcaculator::cacul_2_1(){inti=0;int*a_array=newint(k+1);int*b_array=newint(k+1);a_array[0]=a;b_array[0]=(int)pow(a,m_array[0])%n;do{a_array[i+1]=(a_array[i]*a_array[i])%n;b_array[i+1]=(b_array[i]*(int)pow(a_array[i+1],m_array[i+1]))%n;i++;}while(i<k);cout<<"a^m(modn)="<<a<<"^"<<m<<"(mod"<<n<<")="<<b_array[k]<<endl;deletea_array,b_array;}voidcaculator::cacul_2_2(){inti=k;int*c_array=newint(k+1);int*d_array=newint(k+1);c_array[k]=1;d_array[k]=(int)pow(a,m_array[k])%n;do{i--;c_array[i]=(d_array[i+1]*d_array[i+1])%n;d_array[i]=(c_array[i]*(int)pow(a,m_array[i]))%n;}while(i>0);cout<<"a^m(modn)="<<a<<"^"<<m<<"(mod"<<n<<")="<<d_array[0]<<endl;deletec_array,d_array;}voidmain(){intx,y,z;cout<<"请依次输入a,m,n"<<endl;cin>>x>>y>>z;caculatormember(x,y,z);cout<<"算法2_1"<<endl;member.cacul_2_1();cout<<"算法2_2"<<endl;member.cacul_2_2();}急需帮助,有关错误问题!!!我编译的时候没有任何问题,但是程序在执行时,会出现异常中止~~~~~~有时候又会出现下面的错误DebugAssertionFaile?

最佳回答

  • new int array 的方式应为:a = new int[n] 而不是 a = new int(n)。后一种方式只产生了一个值为n的int指针,前一种才会产生有n个单元的int数组。
    2011-04-06 12:39:18
  • 你跟踪debug一下不就清楚了
    2011-04-04 00:12:47
  • 很赞哦! (134)