2016-04-27 11 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()関数の呼び出し時にメモリの問題が発生し、範囲外エラーが発生しますが、両端キューに正しい値が設定されている理由がわかりません私が確認した住所。デキューポインタへの設定値の発行

どこが間違っていますか?

+0

なぜ 'deque 'の代わりに' deque 'がありますか?なぜポインタの使用法ですか?意図的にコードの問題を引き起こそうとしているようです。 – PaulMcKenzie

+0

私の場合、扱う値は他の関数やスレッドによって変更されるため、ポインタを浮動小数点にする以外に何をするべきかは分かりませんでした。 (上記のコードは、実際にメインコードベースに機能を実装する前に試したサンプルです) –

答えて

3

ここに問題があります。

void initArray(deque<float*> mydeque, float* values) 
{ 
    for(int i=0;i<3;i++) 
     mydeque.push_back(values+i); 
} 

mydequemydequeが充填され、後に破壊された、あなたが渡されたものは何でものコピーになるだろう。最初に渡されたパラメータは変更されません。そのままあなたのコードは動作しますが、あなたはfloatへのポインタのstd::dequeを使用してはならないものの は

void initArray(deque<float*>& mydeque, float* values) 
{ 
    for(int i=0;i<3;i++) 
     mydeque.push_back(new float(values+i); 
} 

...参照によってパラメータを取るために、それを変更します。その方法はあまりにも脆弱であり、時間と記憶にはそれほど性能がありません。値ごとに整数型を使用することをお勧めします。

+0

お返事ありがとうございます。私の場合、扱う値は浮動小数点であり、他の関数やスレッドによって変更されるため、浮動小数点型を使用する以外に何をするべきかは不明でした。 (上のコードは、実際にメインコードベースで機能を実装する前に試したサンプルです)。 –

+0

また、私は浮動小数点の使用について知りたかったのですが、アクセス時間は本当に高かったのですが、なぜ積分タイプ?その背後にある論理は何ですか? –

関連する問題