gpt4 book ai didi

c++ - 删除 vector 中的指针后出现意外行为

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:10:35 30 4
gpt4 key购买 nike

我在试验指针 vector 时遇到了以下我不太理解的行为:

#include <iostream>
#include <vector>

int main()
{
std::vector<int*> vec;

int* p1 = new int;
*p1 = 100;

vec.push_back(p1);
std::cout << *vec[0] << std::endl;

delete p1;
std::cout << *vec[0] << std::endl;

int* p2 = new int;
*p2 = 200;

std::cout << *vec[0] << std::endl;

return 0;
}

使用 MinGW C++ 编译器 (g++),这给了我以下输出:

100
5640648
200

当然,当删除指针时,实际元素 vec[0] 并没有被删除,但请注意 p2 根本没有插入 vector 中。不过,打印第一个元素的值会返回这个看似无关的指针的值!此外,稍微重构代码以便在删除 p1 之前声明 p2 不会产生此行为。

为了确保,我还使用 MSVC++ 编译了它,这给了我以下(预期的)输出:

100
5484120
5484120

有人对第一个输出有解释吗?

最佳答案

因为删除后您访问内存会导致未定义的行为:

delete p1;
std::cout << *vec[0] << std::endl; <-- Buggy code

未定义的行为:- 不保证它将如何工作

关于c++ - 删除 vector 中的指针后出现意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17999545/

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