将设置值发布到十克指针

Issue settings value to deque pointer

本文关键字:十克 指针 设置      更新时间:2023-10-16
#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 具有我验证的正确地址。

我哪里出错了?

你的问题就在这里。

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);
}

虽然您的代码将按原样工作,但您不应使用指向float的指针std::deque。它的方式太脆弱了,在时间和记忆方面表现不佳。更喜欢按值使用整型类型。