我有下面的代碼,當我打印時,我已經推入向量中的元素不同。向量不顯示正確的元素
#include<stdio.h>
#include<iostream>
#include<vector>
using namespace std;
int size = 0;
int main()
{
int i,num1,num2,num;
vector<char *>vec;
for(i=0;i<7;i++)
{
char buffer[30];
if(i%2==0)
{
strcpy(buffer,"hello");
}
else
{
strcpy(buffer,"bye");
}
printf("buffer has %s\n",buffer);
vec.push_back(buffer);
}
for(i=0;i<vec.size();i++)
{
cout<<"CHECK vec["<<i<<"] has "<<vec[i]<<endl;
}
return 0;
}
當我執行我得到了以下結果:
buffer has hello
buffer has bye
buffer has hello
buffer has bye
buffer has hello
buffer has bye
buffer has hello
CHECK vec[0] has hello
CHECK vec[1] has hello
CHECK vec[2] has hello
CHECK vec[3] has hello
CHECK vec[4] has hello
CHECK vec[5] has hello
CHECK vec[6] has hello
我可以看到通過GDB如下:
(gdb) p vec
$5 = std::vector of length 1, capacity 1 = {**0x7fffffffe790** "bye"}
(gdb) n
11 for(i=0;i<7;i++)
(gdb) p vec
$6 = std::vector of length 2, capacity 2 = {**0x7fffffffe790** "bye", **0x7fffffffe790** "bye"}
矢量元素的地址是不是第一次不同和其他元素的第二元素等。任何人都可以請解釋如何在向量中獲得正確的元素以及爲什麼發生這種情況。
首先,正確縮進你的代碼。 – Ilya 2014-10-11 11:29:14
您的矢量不包含字符串的存儲空間,只包含指向局部變量的指針。當它超出範圍時,向量指向垃圾。改爲使用std :: string的向量。 – 2014-10-11 11:30:36
+1,因爲你使用'gdb'-1,因爲縮進很差,代碼也比較大 – P0W 2014-10-11 11:30:50