小编mhj*_*lam的帖子

删除向量中的指针后出现意外行为

我正在尝试使用指针向量并遇到以下行为,我不太明白:

#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;
}
Run Code Online (Sandbox Code Playgroud)

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

100
5640648
200
Run Code Online (Sandbox Code Playgroud)

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

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

100
5484120
5484120
Run Code Online (Sandbox Code Playgroud)

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

c++ pointers vector

4
推荐指数
2
解决办法
174
查看次数

标签 统计

c++ ×1

pointers ×1

vector ×1