OpenGL中出现溢出

freebr 2010-12-12 11:22:53
最近做基于 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

另外在其他地方的代码也会溢出,同样也是逐语句调试没有报错,就是因为这调试没有问题,弄得我弄很久都找不到原因。请达人指点则个!谢谢
...全文
93 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
dbcontrols 2010-12-12
  • 打赏
  • 举报
回复
这两个函数是释放内存的,一个是释放对象的,一个是释放数组的,这些东西用完要随手关门,来去匆匆,随手冲冲嘛
freebr 2010-12-12
  • 打赏
  • 举报
回复
厄,谢谢dbcontrols的回复,可是我的 pt 数组是用户一次性手动设置的,不是经常需要更新的,为何需要用 erase 呢?另外那个 Nothing 又有何用呢,在下愚筋不能省悟,恳望赐教
dbcontrols 2010-12-12
  • 打赏
  • 举报
回复
Erase 语句



重新初始化大小固定的数组的元素,以及释放动态数组的存储空间。

语法

Erase arraylist

所需的 arraylist 参数是一个或多个用逗号隔开的需要清除的数组变量。

说明

Erase 根据是固定大小(常规的)数组还是动态数组,来采取完全不同的行为。Erase 无需为固定大小的数组恢复内存。Erase 按下表来设置固定数组的元素:

数组类型 Erase 对固定数组元素的影响
固定数值数组 将每个元素设为 0。
固定字符串数组(长度可变) 将每个元素设为零长度字符串 ("")。
固定字符串数组(长度固定) 将每个元素设为 0。
固定 Variant 数组 将每个元素设为 Empty。
用户定义类型的数组 将每个元素作为单独的变量来设置。
对象数组 将每个元素设为特定值 Nothing。


Erase 释放动态数组所使用的内存。在下次引用该动态数组之前,程序必须使用 ReDim 语句来重新定义该数组变量的维数。
dbcontrols 2010-12-12
  • 打赏
  • 举报
回复
Nothing


使用 Nothing 关键字被将对象变量从实际对象中分离开来。要使用 Set 语句将 Nothing 赋值给对象变量。例如:

Set MyObject = Nothing

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

809

社区成员

发帖
与我相关
我的任务
社区描述
VB 多媒体
社区管理员
  • 多媒体
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧