2016-04-27 52 views
0
#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有正確的我驗證的地址。問題設置值deque指針

我哪裏錯了?

+0

爲什麼你有'deque '而不是'deque '?爲什麼使用指針?看起來你有意在你的代碼中引發問題。 – PaulMcKenzie

+0

在我的情況下,我處理的值被其他函數或線程修改,所以不知道除了使用指針指向float之外還有什麼別的辦法。 (上面的代碼只是我在實際實現主代碼庫中的功能之前嘗試的一個示例。) –

回答

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::dequefloat。它的方式太脆弱,而且在時間和記憶上表現不那麼好。傾向於按值使用整型。

+0

感謝您的回答。在我的情況下,我處理的值是浮動,並且它們被其他函數或線程修改,所以不知道除了使用指針浮動之外還應該做什麼。 (上面的代碼只是我在實際實現主代碼庫中的功能之前嘗試的一個示例。) –

+0

此外,我想知道使用浮點數的訪問時間非常長,您爲什麼認爲使用積分將會更高效類型?這背後的邏輯是什麼? –