問題タブ [dynamic-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++ - std::string の std::vector?
内部ベクトルが再次元化されている場合、私はすでにstd::vector
内部でいくつかの問題を抱えています。(内部文字列のサイズを変更できるため)std::vector
を持つことが完全に安全であるか、それとも優れているかを知りたいですか?std::vector<std::string>
std::vector<std::string*>
c++ - スマートポインタが生まれる前
スマートポインター(動的領域のリソースの所有権を取得し、使用後にリソースを解放できる)が登場する前は、リソースポインターを受け取る関数に引数として渡されたときに、動的に作成されたオブジェクトの簿記がどのように実行されたか疑問に思います。
簿記とは、「新しい」ものがある場合、その後のある時点で、それに続く「削除」があるはずであることを意味します。そうしないと、プログラムでメモリリークが発生します。
次に、Bがクラスで、void a_function(B *)がサードパーティのライブラリ関数である例を示します。
3行目で何をしますか?サードパーティの機能がメモリの割り当て解除を処理したと思いますか?そうでない場合、そして私がそうだと思うなら、私のプログラムはメモリリークに苦しんでいます。しかし、それがbによって占有されているメモリの割り当てを解除し、私もmain()でそれを行って安全を確保すると、bは実際には2回解放されてしまいます。ダブルフリーエラーが原因でプログラムがクラッシュします!
c - 1つの大きなmallocメモリをスライスしてmalloc呼び出しを減らします
まず、ここからアイデアを得ました。
かつて私が書いた、たくさんの小さなメモリの塊を使用し、それぞれがmalloc()で割り当てられたアプリがありました。正しく動作しましたが、低速でした。私はmallocへの多くの呼び出しを1つだけに置き換えてから、アプリ内でその大きなブロックをスライスしました。それははるかに速かった。
アプリケーションのプロファイリングを行っていましたが、malloc呼び出しの数を減らすと、パフォーマンスが予想外に向上しました。ただし、まだ同じ量のメモリを割り当てています。
だから、私はこの男がしたことをしたいのですが、それを行うための最良の方法がわかりません。
私の考え:
落とし穴:
- 10000を超えないようにする必要があります
- 占有したのと同じ順序でメモリを解放する必要があります。(私の場合、再帰を使用しているので大きな問題ではありませんが、可能であればそれを避けたいと思います)。
Mihai Maruseacからのインスピレーション:
int
まず、基本的にどのメモリインデックスが空いているかを示すリンクリストを作成します。次に、呼び出された構造にプロパティを追加しましたint memoryIndex
。これは、占有されているメモリを任意の順序で返すのに役立ちます。そして幸いなことに、私のメモリの必要量はいつでも5 MBを超えることはないと確信しているので、その量のメモリを安全に割り当てることができます。解決しました。
c - 動的に割り当てられた 2 次元配列のサイズを取得する方法
2D 配列を動的に割り当てました。ここにコードがあります
arrofptr、arrofptr [0]、arrofptr [1]に割り当てられているバイト数を知る必要がありますか? サイズを知る方法はありますか?
印刷する場合
次に、4を出力します。
c - 配列を配列へのポインタとして宣言するときに割り当てられるメモリはいつですか
20x10の2D配列を割り当てようとしているときに、これらのステップのどれでメモリが割り当てられますか
ステップ1:int (*p)[10];
ステップ2:p = malloc( 20 * sizeof(*p) );
すべてのメモリ(20 x 10 x 4バイト)がステップ2で割り当てられますか、それともある程度のメモリがステップ1でも割り当てられますか?
c++ - オブジェクトの動的配列で delete [] を呼び出しても、メモリの割り当てが解除されませんか?
次のコードでは:
実行結果は次のとおりです。
- インデックス番号が 15 の要素が存在する可能性があるのは、10 個しか割り当てていない場合です。
- 配列全体の割り当てが解除された後もポインターに値が残っているのはなぜですか?
次のような単一の割り当てで削除を試みました:
結果は正常です。
コンパイラに依存しないことを確認するために、fedora 17 および別のプラットフォーム (SLC5 - Red Hat ベースの Linux) で gcc 4.7.2 および gcc 4.1.2 を使用してテストされています。ここで何が間違っていますか?
c - 2Dアレイの動的メモリ割り当てがクラッシュする
callocを使用して2D配列にメモリを動的に割り当てようとしています。列は2に固定されているため、動的な行のみです。
これが私が試していることです:
しかし、問題は、配列にアクセスしているときにプログラムがクラッシュすることです。MinGWGCCでEclipseを使用しています。
これが私の最初の投稿なので、ここにさらにデータを入れる必要があるかどうか、またはこれに対処する方法を教えてください。
c - ファイルポインタの配列を動的に割り当てます
Cでファイルポインタを「動的に」割り当てることは可能ですか?私が言いたいのはこれです:
ここで、nは整数値です。ポインタ値の配列が必要ですが、ユーザー入力を取得する前にいくつあるかわからないため、ハードコーディングできません。どんな助けでも素晴らしいでしょう!