天天看点

vector中保存字符指针的总结

  vector,相信接触过c++的开发人员都不陌生。可以简单的理解为其是能够动态扩展的数组。闲话少叙,接下来描述曾经遇到过的一个问题。

  打算使用vector来保存一批字符串,自然而然的想到了使用如下方式:

vchar用来保存字符串。先来个示例:

输出结果

vchar中保存的值可能如下所示(第一行为索引,第二行为指针):

1

2

3

0x401ed3

0x401ed9

0x401edf

内存分布可能如下:

指针

内存内容

h

e

l

o

w

r

d

c

m

下面看一下异常的代码

结果出乎意料,竟然是3个2

猛然一看,挺困惑,静下来一分析,嗯嗯,原来如此啊。如下:

vc中存储的是指针,可能如下:

0x1bee258

vector中的元素均指向同一个地址,在循环结束时,这块内存中的值也就变成了2,所以它们的值自然也就是同一个了。

找到了原因,问题自然就好解决了。一种方法,每次放入不同的指针。更简单的一种方案是,使用vector< string>来代替vector< char *>。

输出结果可能如下:

可以看到,三个对象的地址明显不是同一个,表明vs中存放的是三个不同的对象。

使用vector或其他容器的时候,如果其保存的是指针类型的数据,一定要留心。

继续阅读