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