인쇄 할 때 벡터에 밀어 넣은 요소가 동일하지 않은 아래 코드가 있습니다. 벡터 요소의벡터가 오른쪽 요소를 표시하지 않습니다.
(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"}
주소는 1 회에 차이가 있습니다
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를를 통해 다음 볼 수 있습니다 : 나는 실행되면
#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;
}
나는 다음과 같은 결과를 얻었다 두 번째 요소와 기타 요소에 대해서도 마찬가지입니다. 누구든지 벡터의 올바른 요소를 얻는 방법과 왜 이런 일이 일어 났는지 설명해 주실 수 있습니까?
우선, 들여 쓰기 코드를 올바르게 작성하십시오. – Ilya
벡터에 문자열에 대한 저장소가 없으며 로컬 변수에 대한 포인터 만 있습니다. 범위를 벗어나면 벡터는 쓰레기를 가리 킵니다. 대신 std :: string의 벡터를 사용하십시오. –
들여 쓰기가 좋지 않고 코드가 비교적 크기 때문에 'gdb'-1을 사용했기 때문에 +1합니다. – P0W