回 帖 发 新 帖 刷新版面

主题:[讨论]Win32 Release/Win32 Debug两种模式运行问题

我用Win32 Release 模式运行没有出现错误,但是用Win32 Debug模式运行,则出现数组越界,
运行终止,这是怎么回事?

回复列表 (共6个回复)

沙发

Release为了加快运行速度,不检查数组越界

板凳

release模式确实是加快了速度。问题出在一个循环中,有个累加的整型变量在Debug模式下,运行了一段时间后该整型变量突然增大,超乎寻常的大,导致了数组越界;而在Release模式下,则没有出现该情况,循环直接做完也没有出现越界情况,检查累加变量每次运行结果没有问题。

3 楼

代码呢?

4 楼

release虽然能运行,但我觉得99.9%的可能运行的结果是错的。 debug模式是专门为还没成熟的程序调试用的,它的调试手段当然比release高明。调试程序一般开始的时候肯定是在debug模式下进行的,这样好找错,像你说的,debug模式下,你都已经知道是数组越界的错误了,那改过来就是了。

5 楼

subroutine coo_A(AA,IAA,JAA)
    include 'fpcom.txt'
    dimension AA(*),IAA(*),JAA(*)
    real*8    AA   !存储矩阵A的非零元素
    integer   iaa  !矩阵A非零元素的行指标
    integer   jaa  !矩阵A非零元素的列指标
    integer   nnz  !矩阵非零元素的个数
    integer   n1,n2,n3,n4,n5,n6,n7,n8,n9,npth
c
      nnz=0
    call mcoeff
    do k=1,nrmax
    do i=1,npmax
    do j=1,nthmax
    npth=(k-1)*npmax*nthmax
c
      n1=npth+(i-1)*nthmax+j-nthmax-1 
    if(n1.gt.0.and.amp9(j,i,k).ne.0.)then
       nnz=nnz+1
       aa(nnz)=amp9(j,i,k)
       iaa(nnz)=npth+(i-1)*nthmax+j
       jaa(nnz)=n1
    endif
c
    n2=npth+(i-1)*nthmax+j-1
    if(n2.gt.0.and.amp8(j,i,k).ne.0.)then
       nnz=nnz+1
       aa(nnz)=amp8(j,i,k)
       iaa(nnz)=npth+(i-1)*nthmax+j
       jaa(nnz)=n2
    endif
c
      n3=npth+(i-1)*nthmax+j+nthmax-1
    if(n3.gt.0.and.amp7(j,i,k).ne.0.)then
       nnz=nnz+1
       aa(nnz)=amp7(j,i,k)
       iaa(nnz)=npth+(i-1)*nthmax+j
       jaa(nnz)=n3
      endif
c
    n4=npth+(i-1)*nthmax+j-nthmax 
    if(n4.gt.0.and.amp6(j,i,k).ne.0.)then
       nnz=nnz+1
       aa(nnz)=amp6(j,i,k)
       iaa(nnz)=npth+(i-1)*nthmax+j
       jaa(nnz)=n4
    endif
c
    n5=npth+(i-1)*nthmax+j 
    if(n5.gt.0.and.amp5(j,i,k).ne.0.)then
       nnz=nnz+1
       aa(nnz)=amp5(j,i,k)     
       iaa(nnz)=npth+(i-1)*nthmax+j 
       jaa(nnz)=n5            
    endif
c
    n6=npth+(i-1)*nthmax+j+nthmax
    if(n6.gt.0.and.amp4(j,i,k).ne.0.)then
       nnz=nnz+1
       aa(nnz)=amp4(j,i,k)
       iaa(nnz)=npth+(i-1)*nthmax+j
       jaa(nnz)=n6
    endif
c
    n7=npth+(i-1)*nthmax+j-nthmax+1
    if(n7.gt.0.and.amp3(j,i,k).ne.0. )then
       nnz=nnz+1
       aa(nnz)=amp3(j,i,k)
         iaa(nnz)=npth+(i-1)*nthmax+j
       jaa(nnz)=n7
    endif
c

    n8=npth+(i-1)*nthmax+j+1 
    if(n8.gt.0.and.amp2(j,i,k).ne.0.)then
       nnz=nnz+1 
         aa(nnz)=amp2(j,i,k)         
       iaa(nnz)=npth+(i-1)*nthmax+j
       jaa(nnz)=n8
      endif
c
    n9=npth+(i-1)*nthmax+j+nthmax+1 
    if(n9.gt.0.and.amp1(j,i,k).ne.0.) then
       nnz=nnz+1
       aa(nnz)=amp1(j,i,k)
       iaa(nnz)=npth+(i-1)*nthmax+j
       jaa(nnz)=n9
    else
      endif
c
    if(k.gt.1.and.amr3(i,j,k).ne.0.)then
       nnz=nnz+1
       aa(nnz)=amr3(j,i,k)
       iaa(nnz)=(k-1)*npmax*nthmax+(i-1)*npmax+j
       jaa(nnz)=(k-2)*npmax*nthmax+(i-1)*npmax+j
    else
    endif
c
    if(k.lt.nrmax.and.amr1(j,i,k).ne.0.)then
       nnz=nnz+1
       aa(nnz)=amr1(j,i,k)
       iaa(nnz)=(k-1)*npmax*nthmax+(i-1)*npmax+j
       jaa(nnz)=k*npmax*nthmax+(i-1)*npmax+j
    else
    endif
    print*,'k=',k,'i=',i,'j=',j 
    print*,'nnz_1=',nnz 
c    write(*,*)'aa(',nnz,')=',aa(nnz)
c    write(*,*)'iaa(',nnz,')=',iaa(nnz)
c    write(*,*)'jaa(',nnz,')=',jaa(nnz)
    enddo
    end do
    end do
    end
Win32 Release 模式:
k=10 i=51 j=51
nnz_1= 163981
win32 Debug 模式:
k=2,i=27 j=46
nnz_1=26030
forrt1; severe <161>:Program Exception - array bounds exeeded
其中:nrmax=10,npmax=51,nthmax=51

6 楼


不把信息提供完整,没法调试。

我来回复

您尚未登录,请登录后再回复。点此登录或注册