gpt4 book ai didi

c++ - 指向 vector 元素的指针崩溃

转载 作者:太空狗 更新时间:2023-10-29 11:29:01 28 4
gpt4 key购买 nike

    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 本身并没有改变。即使在 vector 重新分配之后,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] 的内存地址几乎总是与重新分配之前不同。这意味着您创建的指针现在指向(可能)无效的内存。
您现在只有一个指针 p 指向某个内存块。无法保证该内存块中的内容,甚至它是否有效。

关于c++ - 指向 vector 元素的指针崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32490972/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com