向deque指针发出设置值

时间:2016-04-27 01:03:45

标签: c++ pointers stl deque

#include <iostream>
#include <string.h>
#include <deque>

using namespace std;

void insertValues(deque<float*> mydeque)
{
    *mydeque.at(0)=12;
}

void initArray(deque<float*> mydeque, float* values)
{
    for(int i=0;i<3;i++)
        mydeque.push_back(values+i);
}

int main ()
{
    float values[3];
    deque<float*> mydeque;
    initArray(mydeque,values);

    insertValues(mydeque); //Gives out of range - memory error

    cout<<values<<" "<<values+1<<" " <<values[0]<<endl;
    values[0]=5;
    cout<<values<<" "<<values+1<<" " <<values[0]<<endl;

    getchar();

    return 0;
}

在上面的代码中,我遇到了调用insertValues()函数的内存问题,并且它提供了超出范围的错误,但我不知道为什么会发生这种情况,因为deque具有我验证的正确地址。

我哪里错了?

1 个答案:

答案 0 :(得分:3)

你的问题就在这里。

void initArray(deque<float*> mydeque, float* values)
{
    for(int i=0;i<3;i++)
        mydeque.push_back(values+i);
}

mydeque将是你传递的任何内容的副本,mydeque被填充并随后被销毁。最初传递的参数保持不变。 修改它以通过引用获取参数...

void initArray(deque<float*>& mydeque, float* values)
{
    for(int i=0;i<3;i++)
        mydeque.push_back(new float(values+i);
}

虽然您的代码可以正常工作,但您不应该使用std::deque指向float的指针。它的方式太脆弱,在时间和记忆方面性能较差。更喜欢按值使用整数类型。