指向向量元素的指针崩溃
pointer to a vector element crashes
vector<int> v;
v.push_back(1);
int * p = &v[0];
for (int i = 2; i <= 100; ++i)
{
v.push_back(i);
}
*p = 5;
我知道vector重新分配了一块新的内存来增加容量,但是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: %08Xn", &v[0] );
for (int i = 2; i <= 100; ++i)
{
v.push_back(i);
}
printf( "New: %08Xn", &v[0] );
getchar();
return 0;
}
您将看到&v[0]
的内存地址几乎总是与重新分配之前的地址不同。这意味着你创建的指针现在指向(可能)无效的内存。
你现在只有一个指针p
指向某个内存块。不能保证内存块中有什么,甚至不能保证它是否有效。
相关文章:
- 为什么要增加导致崩溃的指针
- 指针相关的UE4崩溃.我的指针哪里错了?
- 访问提升:shared_ptr 主范围外崩溃,断言失败:px != 0.指针的正确用法是什么?
- 当键是虚拟继承中涉及的基类指针时,对 std::unordered_map 项的访问崩溃
- 由于指针算法错误,代码在 memcpy 中崩溃
- 使用唯一指针调用函数会使我的程序崩溃
- 智能指针的排序向量:神秘崩溃
- 类指针方法崩溃程序
- 在C++中删除指针数组时析构函数崩溃
- 使用push_back方法获取智能指针矢量时应用崩溃
- 为什么此代码在此 Trie 实现中使用映射 c++ 中的指针崩溃?
- 从 GetProcAddress 获取的函数指针在使用 stdlib 时会使程序崩溃
- 在函数内部错误定位后,从函数中释放返回的指针会导致芯片崩溃
- 为什么此自定义指针类会崩溃?
- 为什么要删除指针崩溃wchar_t?
- C 指针崩溃(非初始化)
- 删除时指针崩溃无效,但指针不同
- 指向向量元素的指针崩溃
- 函数作用域中的指针崩溃
- 为什么指针崩溃所指向的数据会增加