問題タブ [dynamic-memory-allocation]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - newで宣言されたベクトルの要素を割り当てます。C ++
newで割り当てたい大きな2Dベクトルを使用しようとしています(大きいため)。
私が言うなら:
できます。しかし、私が言うなら:
それは機能せず、エラーが発生します:
エラー1エラーC2679:バイナリ'=':タイプ'int'の右側のオペランドをとる演算子が見つかりません(または受け入れ可能な変換がありません)c:\ Users \ jsparger \ Documents \ My Dropbox \ ARI \ VME_0.01 \ VME_0.01 \ V965.cpp 11 VME_0.01
明らかに、私はC++を初めて使用します。この操作を実行するために使用する必要のある構文を誰かが説明してもらえますか。maryはポインタなので、なぜこれが機能しないのかはわかりますが、* mary [5] [5] =「新しい」ために許可されていないものは何ですか?
助けてくれてありがとう。このベクトルは、私の小さなc ++の頭脳が理解するのに十分簡単に思えるので、今のところ使用しますが、このような大きなベクトルが悪い考えであるかどうかなど、遠慮なく知らせてください。
本当にありがとう。
編集:「新品のため許可されていません」と誤解しています。それは明らかに機能し、そうでないのはあまり意味がないので、どこでそれを誤解したのかわかりません。ありがとう。
c++ - O* p = 新しい O[5]; p は何を指していますか?
配列の最初の O に?
c++ - SomeClass * initialEl = new SomeClass [5];
SomeClass * initialEl = new SomeClass [5]; SomeClassに非公開で宣言されたデフォルトコンストラクタがないと仮定すると、必然的にコンパイルされますか?検討:
c# - 新しいステートメントはどのようにヒープ メモリを割り当てますか?
こんにちは、私はこのサンプルのようなコードを書きます。ユーザーが btnNew をクリックするたびに、ヒープとスタック メモリで何が起こっているかを知りたいです。たとえば、ヒープ メモリの新しいブロックはこのグリッドに割り当てられますか?または古いブロックを削除して、この新しいブロックに置き換えますか?または、古いブロックがヒープ メモリに残り、新しいブロックがそれに割り当てられます。
このコード ブロックは、数回のクリックで巨大なメモリを割り当てますか? ** DataGrid は、このタイプの新しいステートメントの使用法とメモリ割り当てについて知りたい任意のコンポーネントに置き換えることができます ** 英語が下手で申し訳ありません!
.
pool - データ構造のリソース プール
stack
、などの基本的なデータ構造を実装するqueues
場合linked list
。メモリを一括して動的に割り当てることによって (ノードの) リソース プールを作成する必要がありますか、それともノードが必要になるたびにメモリを個別に割り当てる必要がありますか?
c++ - STL消去-イディオムとカスタム削除操作およびvalgrindを削除します
これは、手書きのループなどの代わりにSTLアルゴリズムを使用して、古い宿題を書き直そうとする試みです。
私はデータベースと呼ばれるクラスを持っています。このクラスではVector<Media *>
、Media *は(とりわけ)CDまたはBookになります。データベースは動的メモリを処理する唯一のクラスであり、プログラムが起動すると、以下のようにフォーマットされたファイルを読み取り(多少簡略化)、エントリを読み取るときにスペースを割り当て、上記のベクトル(v_)に追加します。
手書きのループを使用すると、これらのオブジェクトの削除は期待どおりに機能します。編集:申し訳ありませんが、話が早すぎました。実際には「手書きの」ループではありません。プロジェクトを編集して、手書きのループを削除しています。これは実際にはfind_ifアルゴリズムと手動削除を使用しますが、問題は有効になるまでです。/編集。
typedef vector<Media *>::iterator v_iter;
これはかなり自明のはずです。パラメータに一致するIDが見つかった場合、ファンクターはtrueを返し、オブジェクトは破棄されます。これは機能し、valgrindはメモリリークを報告しませんが、STLを使用したいので、明らかな解決策は、erase-removeイディオムを使用することです。
ただし、これは「機能」しますが、valgrindによるとメモリリークが発生します。最初のバージョンはリークなしで正常に動作しますが、このバージョンでは、削除するすべてのメディアオブジェクトに対して「解放されていない」3つの割り当てが常に表示されます。
c++ - 個々の動的割り当ての極端なメモリ使用量
これは、Windows 7 の MSVC++ 2010 で行った簡単なテストです。
これは一般的な知識ですか、それとも何か不足していますか? 以前は、必要に応じてその場でオブジェクトを作成していました。たとえば、メッシュ内のすべての三角形に対して new Triangle() など。
個々のインスタンスの動的メモリ割り当てには、実際に桁違いのオーバーヘッドがありますか?
乾杯
編集:
g++ を使用して、Windows XP で動作中の同じプログラムをコンパイルして実行しました。オーバーヘッドは、以前に見られた 64 バイトではなく、16 バイトになりました。とても興味深い。
c++ - malloc と free はどのように実装されていますか?
C++ でのメモリ管理に役立つ新しい機能を追加するために、独自の動的メモリ管理システムを実装したいと考えています。
Windows (XP) と Linux (Ubuntu) を使用しています。「malloc」や「free」などの機能を実装するには何が必要ですか? 最低レベルのシステムコールを使用する必要があると思います。
Windows の場合、GetProcessHeap、HeapAlloc、HeapCreate、HeapDestroy、および HeapFree という関数を見つけました。
Linux の場合、ヒープ管理用のシステム コールは見つかりませんでした。Linux では、malloc と free はシステム コールですよね。
ありがとう
編集:
C++ はガベージ コレクターを提供しておらず、ガベージ コレクターは低速です。一部の割り当ては簡単に解放できますが、ガベージ コレクターが必要な割り当てもあります。
これらの関数を実装し、新しい機能を追加したいと考えています。
* free() が呼び出されるたびに、ポインターがヒープに属しているかどうかを確認します。
※ごみの回収にご協力ください。割り当てられたブロックに関する情報を保存する必要があります。
* 複数のヒープを使用します (Windows では HeapCreate/HeapDestroy)。割り当てられたブロックを含むヒープ全体をすばやく削除できます。
multidimensional-array - 多次元配列のランタイム割り当て
これまで、次の構文は無効であると考えていましたが、
しかし、今日試してみたらうまくいきました!偶然に機能しないことを確認するために何度も実行しました.valgrindでさえセグメンテーション違反やメモリリークを報告しませんでした!! とても驚いています。g++ で導入された新機能ですか? 以下のプログラムの A で行ったように、正しいストライドでインデックスを付けることにより、常に 1D 配列を使用して行列を格納してきました。しかし、この新しい方法は、B の場合と同様に、非常にシンプルでエレガントなので、私はずっと望んでいました。本当に安全に使用できますか?サンプルプログラムを参照してください。
PS。問題があれば、g++-4.4.3 でコンパイルしています。
c - テキスト ファイルからすべてのコンテンツを読み取る - C
テキスト ファイルからすべてのコンテンツを読み込もうとしています。ここに私が書いたコードがあります。
使い方はこれ
私は C に慣れていないので、このコードが完璧に見えるかどうか疑問に思っています。問題/改善点はありますか?
使用コンパイラ: GCC. ただし、このコードはクロス プラットフォームであると想定されています。
どんな助けでも大歓迎です。
編集
と を使用した更新されたコードを次に示しfread
ますftell
。
この関数の相対的な複雑さはどうなるのだろうか?