指向vector元素的指针崩溃

vector<int> v; v.push_back(1); int * p = &v[0]; for (int i = 2; i <= 100; ++i) { v.push_back(i); } *p = 5; 

我知道向量重新分配新的内存来增加容量,但是p只是指向一些内存地址的指针,而p本身没有改变。 即使在向量重新分配之后,由p指向的内存也在同一进程的地址空间中。 为什么会崩溃?

如果您将您的代码更改为以下内容:

 #include <stdio.h> #include <vector> int main(int argc, char* argv[]) { std::vector<int> v; v.push_back(1); int * p = &v[0]; printf( "Old: %08X\n", &v[0] ); for (int i = 2; i <= 100; ++i) { v.push_back(i); } printf( "New: %08X\n", &v[0] ); getchar(); return 0; } 

你将看到&v[0]的内存地址几乎总是与重新分配之前的内存地址不同。 这意味着您创建的指针现在指向(可能)无效的内存。
你现在只需要一个指向内存块的指针。 不能保证内存块是什么,或者即使它是有效的。