#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具有我验证的正确地址。
我哪里错了?
答案 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
的指针。它的方式太脆弱,在时间和记忆方面性能较差。更喜欢按值使用整数类型。