向双端队列指针发出设置值

Issue settings value to deque pointer

#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() 函数时遇到了内存问题,它给出了超出范围的错误,但我不知道为什么会这样,因为双端队列具有我验证过的正确地址。

我哪里错了?

你的问题就在这里。

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 的指针。它太脆弱了,而且在时间和内存方面的性能也很差。更喜欢按值使用整数类型。