热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

VB6.0动态定义一维数组“ReDimPreserveX(1tom)”中m值最大为多少?有没有上限?

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

14 个解决方案

#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


在我的电脑里,这个上限是:52999999

#3


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

#4


动态分配内存有上限,不过好像是2G.

#5


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

#6


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,这是为何呀?

#7


引用 6 楼 LIUSHUANG19851119 的回复:
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,这是为何呀?


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

#8


Private Sub Command1_Click()
Dim x()
ReDim Preserve x(1 To 1600000) '1600000=400*4000
MsgBox UBound(x) '可通过
End Sub

Private Sub Command2_Click()
Dim x()
ReDim Preserve x(1 To 20 * 80)
MsgBox UBound(x) '可通过
End Sub

Private Sub Command3_Click()
Dim x()
ReDim Preserve x(1 To 400 * 4000) '溢出
End Sub

Private Sub Command4_Click()
MsgBox 400 * 4000 '溢出
End Sub

比较上述测试结果,五楼老鸟的看法是对的

#9


上标和维数都直接影响数组占用的内存大小
一个数组能申请到最大多少的空间,要看电脑里面有多少物理内存和虚拟内存

#10


都查看过错误没有?
LIUSHUANG19851119 的语句根本不是内存不足的错误,我5楼已经说得很明白了。
Option Explicit

Sub 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

#11


 

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

#12


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

#13


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

#14


问题已解决
谢谢大家的热情帮组
结贴给分

推荐阅读
author-avatar
pipipa
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有