我在VB6.0程序中动态定义一个一维数组 ReDim Preserve X(1 to 400*4000)出错, 难道动态分配内存维数也有上限?
请教大家,谢谢!

解决方案 »

  1.   

    要这样写,不能写式子,要算出来:
    Option Explicit
    Dim X() As Long
    Private Sub Command1_Click()
            Dim i As Long
            i = 1600000
            ReDim Preserve X(1 To i)
            Debug.Print Len(X(0)) * i '数组大小
    End Sub
      

  2.   

    Option Explicit
    Dim X() As Long
    Private Sub Command1_Click()
            Dim i As Long
            i = 1600000
            ReDim Preserve X(1 To i)
            Debug.Print Len(X(0)) * i '数组大小
    End Sub
      

  3.   

    两个 Integer 相乘的结果超过 32767,产生溢出错误,与是否定义数组无关。
    应该强制使用 Long 类型计算。
    ReDim Preserve x(1 To 400 * 4000&)
      

  4.   

    Dim nLnNum As Integer, nPtNum As Integer
    ReDim Preserve GrdDataTem(1 To nLnNum * nPtNum)
    当nLnNum和nPtNum比较小的时候可以,但太大就不行了(如都等于400),为什么?
    我按照1楼和4楼的意见写为:
    Dim Lenth As Long 
    Lenth = nLnNum * nPtNum
    ReDim Preserve X(1 To Lenth ) 
    调试发现Lenth值是0,这是为何呀?
      

  5.   


    问题是你的 nLnNum 与 nPtNum 被赋值了没有........
    0 乘以 0 当然等于 0 啦
      

  6.   

    Private Sub Command1_Click()
    Dim x()
    ReDim Preserve x(1 To 1600000) '1600000=400*4000
    MsgBox UBound(x) '可通过
    End SubPrivate Sub Command2_Click()
    Dim x()
    ReDim Preserve x(1 To 20 * 80)
    MsgBox UBound(x) '可通过
    End SubPrivate Sub Command3_Click()
    Dim x()
    ReDim Preserve x(1 To 400 * 4000) '溢出
    End SubPrivate Sub Command4_Click()
    MsgBox 400 * 4000 '溢出
    End Sub比较上述测试结果,五楼老鸟的看法是对的
      

  7.   

    都查看过错误没有?
    LIUSHUANG19851119 的语句根本不是内存不足的错误,我5楼已经说得很明白了。
    Option ExplicitSub Main()
        On Error GoTo E:
        Dim x() As Byte
              
    10  ReDim x(&H7FFFFFFF)
    20  ReDim Preserve x(1 To 400 * 4000)
    30  ReDim Preserve x(1 To 400 * 4000&)
        Exit Sub
    E:    Debug.Print Erl & ":", Err.Number, Err.Description
        Resume Next
    End Sub
      

  8.   


    Dim GrdDataTem() as Double
    Dim nLnNum As Integer, nPtNum As Integer 
    nLnNum =400
    nPtNum =400
    ReDim Preserve GrdDataTem(1 To nLnNum * nPtNum&) 
    这个“&”有何作用?怎么编译通不过?
    按老鸟意见 怎么强制使用 Long 类型计算?
      

  9.   

    强制 Long 型,只对常量起作用。
    nLnNum、nPtNum 定义为 Long。
      

  10.   

    ReDim Preserve GrdDataTem(1 To Clng(nLnNum) * CLng(nPtNum))