最近做基于 OpenGL 的三维对象模拟器,在做拾取三维对象时老是出现溢出。出错的代码(这句是在 rm_select 模式下绘制三维对象用的)glVertex3f pt.pt(0).X - offset, pt.pt(0).Y - offset, pt.pt(0).z注: 上面 pt.pt(0) 的 X,Y,Z 和 offset 均为单精度类型变量。但是出错后按 F8 做逐语句执行却没有报错!为什么?注: opengl 里 glVertex3f 的声明:
Sub glVertex3f(x As GLfloat, y As GLfloat, z As GLfloat)
    VBOpenGL.GL 的成员
    Specify a vertex另外在其他地方的代码也会溢出,同样也是逐语句调试没有报错,就是因为这调试没有问题,弄得我弄很久都找不到原因。请达人指点则个!谢谢

解决方案 »

  1.   

    Nothing
    使用 Nothing 关键字被将对象变量从实际对象中分离开来。要使用 Set 语句将 Nothing 赋值给对象变量。例如:Set MyObject = Nothing几个对象变量可以引用同一个实际对象。当 Nothing 被赋值给一个对象变量时,该变量不再引用任何实际对象。当几个对象变量引用同一个对象时,只有将全部对象变量都设置成 Nothing 之后,与被引用的对象有关联的内存资源及系统资源才会被释放掉,在这里,或者明确使用 Set,或者在最后一个设置成 Nothing 的对象变量超出范围后隐含地使用 Set。
      

  2.   

    Erase 语句      重新初始化大小固定的数组的元素,以及释放动态数组的存储空间。语法Erase arraylist所需的 arraylist 参数是一个或多个用逗号隔开的需要清除的数组变量。说明Erase 根据是固定大小(常规的)数组还是动态数组,来采取完全不同的行为。Erase 无需为固定大小的数组恢复内存。Erase 按下表来设置固定数组的元素:数组类型 Erase 对固定数组元素的影响 
    固定数值数组 将每个元素设为 0。 
    固定字符串数组(长度可变) 将每个元素设为零长度字符串 ("")。 
    固定字符串数组(长度固定) 将每个元素设为 0。 
    固定 Variant 数组 将每个元素设为 Empty。 
    用户定义类型的数组 将每个元素作为单独的变量来设置。 
    对象数组 将每个元素设为特定值 Nothing。 
    Erase 释放动态数组所使用的内存。在下次引用该动态数组之前,程序必须使用 ReDim 语句来重新定义该数组变量的维数。
      

  3.   

    厄,谢谢dbcontrols的回复,可是我的 pt 数组是用户一次性手动设置的,不是经常需要更新的,为何需要用 erase 呢?另外那个 Nothing 又有何用呢,在下愚筋不能省悟,恳望赐教