07/03/12 17:02:59
push_backしていってvectorのサイズがでかくなったときにvector内部で再割り当てが起こってる。
なので&v[i-1]は途中から不正なポインタを指す。
なので本当は&v[i-1]が不変なのを期待しちゃダメ。
↓こうやって最初に100確保しておけば再割り当てが起こらないだろうから大丈夫。
int main()
{
int i;
std::vector<Test> v(100);
Test b;
b.p = NULL;
v[0] = b;
for (i=1;i<100;i++) {
b.x = i;
b.p = &v[i-1];
v[i] = b;
}
Test *c;
c = &v[v.size()-1];
int count = 0;
while ( c->p != NULL ) {
printf("%d: %d\n",count++,c->x);
c = c->p;
}
}