subroutine myfunc(val, n, x, grad, need_gradient, f_data)
      real(8) val, x(n), grad(n), averg_res
      integer n, need_gradient, counts
      integer m, vn

      real(8),allocatable :: vz(:),vv(:)

      real(8),allocatable :: rr(:),tt(:),resat(:),restt(:), p(:),sx(:),sz(:),at(:)
      real(8) :: fdata(300)
      vv=0
      m  = nint(fdata(1))
      vn = nint(fdata(2))
      sx = fdata(3         :  m+2)
      sz = fdata(m+3       :  2*m+2)
      at = fdata(2*m+3     :  3*m+2)
      vv = fdata(3*m+3     :  3*m+vn+2)
      vz = fdata( 3*m+vn+3 :  3*m+2*vn+2)

      allocate(rr(1:m),tt(1:m),resat(1:m),restt(1:m), p(1:m))


报错:


     deallocate(rr(1:m),tt(1:m),resat(1:m),restt(1:m), p(1:m))
                 1
错误: (1)处的分配对象必须是 ALLOCATABLE 或 POINTER
fdirect.f95:175.25:

      deallocate(rr(1:m),tt(1:m),resat(1:m),restt(1:m), p(1:m))
                         1
错误: (1)处的分配对象必须是 ALLOCATABLE 或 POINTER
fdirect.f95:175.33:

      deallocate(rr(1:m),tt(1:m),resat(1:m),restt(1:m), p(1:m))
                                 1
错误: (1)处的分配对象必须是 ALLOCATABLE 或 POINTER
fdirect.f95:175.44:

      deallocate(rr(1:m),tt(1:m),resat(1:m),restt(1:m), p(1:m))
                                            1
错误: (1)处的分配对象必须是 ALLOCATABLE 或 POINTER
fdirect.f95:175.56:

      deallocate(rr(1:m),tt(1:m),resat(1:m),restt(1:m), p(1:m))
错误: (1)处的分配对象必须是 ALLOCATABLE 或 POINTER

明明已经规定了allocatable 为什么还报这个错误呢