west_winner
2017-01-10 01:44
采纳率: 0%
浏览 3.5k

c++ vector 存储指针问题

    vector<int*> v;
    for (int i = 0; i < 5; i++)
    {
        int a = i;
        v.push_back(&a);
    }
如上代码,循环完结后,vector内存储的5个值都是4,每次改变a的值都会改变已经压入的v中的值,说明每次执行“int a = i”时都没有申请新内存,可是不是应该申请新的内存吗?菜鸟之见,求大神解答。
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

4条回答 默认 最新

  • jxhaha 2017-01-10 02:14

    编译器优化的结果,楼主不用过于纠结,习惯就好,如果非要实现你想实现的结果,你可以这要写:

    vector<int*> v;
        for (int i = 0; i < 5; i++)
        {
            int *a = new int;
            *a = i;
            v.push_back(a);
        }
    
    
    打赏 评论
  • voidar 2017-01-10 02:32
    在你的这段代码中,vector在执行pushi_back函数时,系统在内存申请一段空间(sizeof(int *))用于存储int指针的地址;
        vector添加一个子元素,子元素本身就是一个指针,指向刚才申请的那段内存空间;
        vector内存储的5个值都是4,说明每个子元素指向的内存空间中存储的int指针地址数一样,是因为变量a在执行完一个循环后销毁,然后再执行下次循环的时候,再次申请变量a时,系统在栈上又将之前a的存储地址又分配给了现在定义的变量a;
    
    打赏 评论
  • shen_wei 2017-01-10 07:26
    vector<int> v;
        for (int i = 0; i < 5; i++)
        {
            v.push_back(i);
        }
    

    这样不是更简单。。

    打赏 评论
  • cute_duck 2017-01-11 12:48

    不知道你真正的需求是什么。这里看不出来。

    打赏 评论

相关推荐 更多相似问题