vector的大小的疑问--begin()到end()不等于大小

大鸟的小天空 2006-05-27 11:30:59
vector<string> sound_path;
sound_path.size() 是8
但是使用
for (vector<string>::const_iterator p=sound_path.begin();p!=sound_path.end();++p)
打印出来的却只有5个值,

大侠能否告知这会是什么问题造成的。实在是纳闷了,不会是内存操作有问题吧

具体的代码如下:
void test()
{
for(int i=0;i<100;++i)
test1();
}

void test1()
{
vector<string> sound_path;
sound_path.push_back("aaaa");
sound_path.push_back("bbbb");
test2(sound_path);
}

void test2(vector<string> & sound_path)
{
printf("%d",sound_path.size());
for (vector<string>::const_iterator p=sound_path.begin();p!=sound_path.end();++p)
sprintf(tmp,"P:%s",(*p).c_str());
}
这样的代码是否有什么隐藏的问题.
...全文
519 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
sungengyu 2006-05-31
  • 打赏
  • 举报
回复
我3个月前也碰到过几乎一样的情况:我用一个map ,size()==1 并且 begin()==end() 。

我当时怀疑可能和线程或动态库的一些东西有关系。因为这段代码在一个动态库中,并且map作为函数的参数传递。后来改用 vector 就正常了。不过测试表明,map在动态库中作为导出函数的参数也是没问题的。那么大概是多线程的原因?具体的问题一直没找到。
bjzhaoxiao 2006-05-30
  • 打赏
  • 举报
回复
你现把循环中的代码注视调,只留下来打印vector内容的代码看看,估计是你的条件屏蔽了没有显示出来的记录。
大鸟的小天空 2006-05-29
  • 打赏
  • 举报
回复
我也奇怪,作的测试代码都没有问题,循环执行10000遍,vector也很正常,而且我的代码里面也就是那样处理的,就是不知道问题在哪里,而且一旦这个问题出现,也会影响其他的数据处理,有可能是tmp的问题,但是tmp的大小为256*8,对于我的使用,足够大了,我就放一些文件路径。。。
这个程序是24小时执行的,第一天运行还是很正常,第二天都有点问题了,而且不是所有时候都不正常,偶尔也会很正常。。真是奇怪了。。
感觉在内存处理上也没啥问题,要么是局部变量,要么是全局变量,都不用delete的。所有的类都是单件模型,在运行期间也不需要delete的。
怀疑
1.是不是太多的vector<string>的局部变量了。
2.是vector<string> a;vector<string> b;b.push_back("aaa")...;a=b;造成的。
但是经过测试代码测试,都没有啥问题呀,可郁闷。
sungengyu 2006-05-29
  • 打赏
  • 举报
回复
野指针?
吃狼的豆腐 2006-05-28
  • 打赏
  • 举报
回复
你是全部放在tmp中,然后输出???

先看下tmp的大小吧,可能后面遇到结束符也不一定,可能后面那些就不会输出
winter_plusplus 2006-05-28
  • 打赏
  • 举报
回复
如果.size()确实是8,那么是不是你显示的有问题。
或者说虽然大小是8,但是后面几个string的内容为空

你贴出来的代码确实不可能看出问题所在的
逸学堂 2006-05-28
  • 打赏
  • 举报
回复
1:把vector改成list测试一下
2:vector的有size测试容器内变量的多少,还有capacity测试容器的容量.那么lz用capacity测试一下
是否和size相同.
3:会不会有些地方使用erase操作了?
snailbreak 2006-05-27
  • 打赏
  • 举报
回复
vector<string> sound_path;
sound_path.size() 是8
但是使用
for (vector<string>::const_iterator p=sound_path.begin();p!=sound_path.end();++p)
打印出来的却只有5个值,


把这个代码贴出来
oyljerry 2006-05-27
  • 打赏
  • 举报
回复
vector的大小选取是否正确,怎么显示的
cnhgj 2006-05-27
  • 打赏
  • 举报
回复
先写个简单的代码自已测试下吧。肯定是你程序的问题。。
wzjall 2006-05-27
  • 打赏
  • 举报
回复
肯定不是vector的问题!

你这个也看不出什么问题来呀!
要不来个完整的事例看看
大鸟的小天空 2006-05-27
  • 打赏
  • 举报
回复
我可能没说清楚,下面的代码是相应的处理代码,我说的8是我代码中的值,下面的代码是按照我的代码整理出来的使用例子,方便大家看,下面确实是2,我就是让你们看看下面的代码是否有什么问题,比如:临时变量的使用,引用参数等...
我也实在是纳闷.

mlog->createLogQ("Start Play File");
if (IS_DEBUG>3)
{
sprintf(tmp,"Start Play File--CH:%d--oneTime:%d---Size:%d",ch_index,oneTime,sound_path.size());
mlog->createLogQ(tmp);
}
if (oneTime<0) last_sound[ch_index].sound_index.clear();
if (oneTime==0) last_sound[ch_index].sound_index = sound_path;

stopPlaySound(ch_index,false);
SsmClearFileList(ch_index);
for (vec_string_io p=sound_path.begin();p!=sound_path.end();++p)
{
if (IS_DEBUG>3)
{
sprintf(tmp,"P:%s--CH:%d",(*p).c_str(),ch_index);
mlog->createLogQ(tmp);
}
strcpy(tmp,(*p).c_str());
if (-1==SsmAddToFileList(ch_index,tmp,6,0,0xffffffff)) lastErrShow();
}
strcpy(tmp,sound_info[JingYin].c_str());
if (-1==SsmAddToFileList(ch_index,tmp,6,0,0xffffffff)) lastErrShow();
if (-1==SsmPlayFileList(ch_index)) lastErrShow();

这是我的程序代码,打印出来的大小确实是8,但是下面循环显示的日志只有4条..奇怪了..
wf520pb 2006-05-27
  • 打赏
  • 举报
回复
怎么会不一样呢,应该是你的错,size只可能是2,你只push_back了2次,怎么会是8呢?
sharpdew 2006-05-27
  • 打赏
  • 举报
回复
大侠能否告知这会是什么问题造成的。实在是纳闷了,不会是内存操作有问题吧
~~~~~~~~~~~~~~~~~~~~~~~~~~~
唯一的原始只可能是你的代码有问题,肯定不是vector的问题!
Cccufo 2006-05-27
  • 打赏
  • 举报
回复
lz 不对啊 你给的vector(string) sound_path.size()=2
和前面说的 8 没有联系啊

64,682

社区成员

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

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