2 wumingjishilunhui wumingjishilunhui 于 2017.01.10 09:44 提问

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
jxhaha   2017.01.10 10:14

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

vector<int*> v;
    for (int i = 0; i < 5; i++)
    {
        int *a = new int;
        *a = i;
        v.push_back(a);
    }

wumingjishilunhui
wumingjishilunhui 是这样的,但是由于任务的需要,我需要使用std::sort对vector进行排序,当使用new申请内存时,std::sort不能成功
11 个月之前 回复
voidar
voidar   2017.01.10 10:32
在你的这段代码中,vector在执行pushi_back函数时,系统在内存申请一段空间(sizeof(int *))用于存储int指针的地址;
    vector添加一个子元素,子元素本身就是一个指针,指向刚才申请的那段内存空间;
    vector内存储的5个值都是4,说明每个子元素指向的内存空间中存储的int指针地址数一样,是因为变量a在执行完一个循环后销毁,然后再执行下次循环的时候,再次申请变量a时,系统在栈上又将之前a的存储地址又分配给了现在定义的变量a;
shen_wei
shen_wei   Ds   Rxr 2017.01.10 15:26
vector<int> v;
    for (int i = 0; i < 5; i++)
    {
        v.push_back(i);
    }

这样不是更简单。。

shen_wei
shen_wei 存放指针本身就是浪费,直接存数值更好!!!
11 个月之前 回复
wumingjishilunhui
wumingjishilunhui 是的,不过由于某些需要,想要使用vector存放指针,但是出现了问题,这小段代码只是我用来测试的
11 个月之前 回复
sinat_33724606
sinat_33724606   2017.01.11 20:48

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

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!