vector 下标问题

anuosix 2008-11-10 01:08:10

这些下标是怎么回事
...全文
1086 29 打赏 收藏 转发到动态 举报
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
anuosix 2008-11-12
  • 打赏
  • 举报
回复
找到原因了,是在release模式下debug产生的问题,结贴
OenAuth.Net 2008-11-10
  • 打赏
  • 举报
回复
发图的时间足够发代码啦
太乙 2008-11-10
  • 打赏
  • 举报
回复
看不大清楚,lz,可不可以直接贴代码,而不是图片啊!!
wangjkk 2008-11-10
  • 打赏
  • 举报
回复
不定义大小,size值为0

std::vector <vertexDescripter> vtrVtx;

这样定义的话!!!

你不push_back元素进去,size值还是为0;

有点不明白你说的意思了,个人觉得你这样用vector有问题

建议你试一下定义到类全局变量里试试

再查找一下自己的定义,是不是有死循环一类的BUG
anuosix 2008-11-10
  • 打赏
  • 举报
回复
说明两点:
(1)即使只是使用类似于:
std::vector<vertexDescripter> vtrVtx;
这种形势,所得结果是一样的,程序运行到这个断点,就会发现下标那么大,居然达到几十亿,太恐怖了
(2)用什么resize()和reserve()等函数根本就没有用,有时候用一下它会缩小一些,但是还是好几万的数值而并不是按
照我指定的值来进行调整
不明白怎么回事

如果在定义的时候不指定大小,不是有一个默认值的么,那这个默认值不可能这么大阿
wangjkk 2008-11-10
  • 打赏
  • 举报
回复
....

那也得看有这个想访问的下标才行!!

不然就越界了!
yshuise 2008-11-10
  • 打赏
  • 举报
回复
可以在程序中加一行代码:
(*(vtr.begin()+K))//k为你想访问的下标
wangjkk 2008-11-10
  • 打赏
  • 举报
回复
不能这样定义vector变量!!
建议你再去查看一下vector含义

Vector 类可以实现可增长的对象数组。与数组一样,它包含可以使用整数索引进行访问的组件。但是, Vector 的大小可以根据需要增大或缩小....

像你这样直接定义下界,当然不可以了!!!

可以用push_back增加对象元素,但不能直接给定最大下界!

还有,像你这样定义,是定义了局部变量,在其它函数里是访问不到的

如果要让其它函数也访问到,需要在.h里定义一个类全部变量!!
wangjkk 2008-11-10
  • 打赏
  • 举报
回复
再有:用完vectoer释放空间!

多试试!

嘿,嘿,也许不小心就解决问题了!
wangjkk 2008-11-10
  • 打赏
  • 举报
回复
你试一下,先不定义边界大小

用push_back填入新增加的元素试试!

再有楼上说的也可能是一个原因.

改变vectoer大小之后,引用vectoer要重新定位!
小猴饲养员 2008-11-10
  • 打赏
  • 举报
回复
每改变一次vectoer的大小,就要重新计算一次 v1.end()

//vector<type> v1;


anuosix 2008-11-10
  • 打赏
  • 举报
回复
赫赫,可能我的代码不清晰
通过没有问题的,而且在数据量小的时候还能得到正确结果,但是一旦数据量变大,就会出现"内存不足"的对话框,关于这个我都开了好几个帖子了,就是没有人能够解决问题

这是我在调试的时候发现的问题,不知道和那个内存不足有没有关系,我在一个国外论坛也发贴询问,那里有个人问我能不能直接运行,我说可以,他还没有回答,听他的意思有可能这个问题并不算什么问题,我不太明白了
wangjkk 2008-11-10
  • 打赏
  • 举报
回复
不是不能,是定义变量的时候,是千万不能放在循环里定义,这是禁忌!!!

这话我收回

代码定义要灵活!也不是说不能在循环里头定义,只要是临时引用的变量,都可以局部定义变量!

绕的我都晕晕,错误百出了!!!

想想,好像我上面的都说错了,没有绝对的好方法好思路,只有最合适最方便的方法和思路!

叠代码是讲究算法的工程!

你D编码习惯我是不清楚啦,个有个的想法看法!!!

编译不过,你就试试换个角度的看法嘛,别钻牛角尖嘛!
anuosix 2008-11-10
  • 打赏
  • 举报
回复
其实这个地方我用size()函数取了一下大小,这个大小倒是正确的,比如vtrIntersect的size为100,但是为什么调试的时候会这样呢,看着我都有点害怕,一个vector居然有几十个亿的大小
另外,这个程序在运行的时候会出现"内存不足"的对话框,不知道和这个有没有关系

如果说超出了作用域,但是大家看我图中断点并没有超出阿,真是郁闷
anuosix 2008-11-10
  • 打赏
  • 举报
回复
这个我觉得没有什么区别的吧,我循环体内定义的虽然没有保存,但是会有别的地方用到的,比如在循环体内调用的函数中会用到这些值,虽然变量本身不能保存,但是总会有处理过这些值保存起来的地方,不然我还要循环要变量干什么呢,而且如果有多个循环,变量都不同,都在外边定义不就乱套了么
wangjkk 2008-11-10
  • 打赏
  • 举报
回复
再补充一句:

在循环外部定义,用完数据如果冗余,可以清空vector一下再用,不用重复每次重复定义!
anuo06 2008-11-10
  • 打赏
  • 举报
回复
还不让连续三次发贴,只好换个马甲了,还是我
察看那些vector的元素,还出现这种情况


而另外一个函数中也有类似的定义,但是那个就是好的,不会有这么大的下标
anuo06 2008-11-10
  • 打赏
  • 举报
回复
在这些下标表示的值中还出现了这种情况:
wangjkk 2008-11-10
  • 打赏
  • 举报
回复
...

vector作局部变量,你还要用它做啥,直接定义一个临时数组就行了!!!

用的着用vector这么复杂吗!!!

不是不能,是定义变量的时候,是千万不能放在循环里定义,这是禁忌!!!

你想啊,一直重复定义!!变量一直在变!!变量值一直没被保存起来,你引用它还有意义吗!!!循环,循环是啥..不言而喻的东西!!!

结构体+vector...不是像你这样用D!
yihan7h 2008-11-10
  • 打赏
  • 举报
回复
楼上正解
加载更多回复(9)

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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