2016-12-25 5 views
0

サイズが13の配列があるとします。サイズが14の配列を格納するための連続した使用可能なメモリセクションがないとします。元の配列を新しい配列にコピーすることはオプションではありません。したがって、最初の13個の要素を同じに保ちながら1つの要素で配列を拡張する唯一の方法は、13番目の要素のあとの次のメモリアドレスに14番目の要素を格納することです。このメモリスロットが利用可能なら、どうすればこのことをやりますか?ダイナミックメモリアドレッシング?前の配列の終わりの直後に次の要素を格納して配列を展開する

+2

私はあなたがHTTP([通常実装]する方法[ 'のstd :: deque'](http://en.cppreference.com/w/cpp/container/deque)検討すべきだと思います。 //thispointer.com/what-is-stddeque-and-how-deque-works-internally /)...あなたはあなたのことについてどうやって行くのかを大まかに知ることができます。 – WhiZTiM

+0

"このメモリスロットが利用可能だった場合、どうすればこのことをやりますか?"利用可能なメモリスロットがあるかどうかをどのように知っていますか?いくつかのコードを表示してください。 –

+0

私はこれを知っていると言っているわけではありません。新しい配列を作成するためのサイズ14の配列のための利用可能な連続したメモリセクションがない場合、私はちょうどこの方法で行う必要があるからです。新しいアレイを動的に割り当て、エラーを返すかどうかを確認することで、これが正しいかどうかを確認できます。 –

答えて

0

標準のC++メソッドはありません。標準ライブラリは通常realloc()を定義していますが、ほとんどのプラットフォームでは、それはメモリをコピーするための別のmalloc()とmemcpy()の呼び出しです。そのメカニズムを隠す標準的なライブラリコンテナを使用することができます。これは最も一般的です。メモリプールオブジェクトを使用します(必要なメモリをすべて割り当て、オブジェクトを割り当てます)。これはあまり一般的ではなく、通常はFEMAやイメージ処理OpenGLレンダリングエンジンで使用できます。

0

私は配列の長さをとり、長さ+ 1の位置にデータを挿入することをお勧めします。 例:

​​
+1

しかし、このメモリスロットは正式には初期化/割り当てされていないため、同じ実行中に将来の動的メモリ割り当てに置き換えられる可能性があります。 –

+0

それはメモリの破損行為です。また、C++での長さフィールドやメソッドなどはありません – Swift

関連する問題