問題タブ [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++ - 動的配列が範囲外になったときにメモリが解放されますか
関数内の配列にメモリを動的に割り当てています。私の質問は次のとおりです。関数の実行が終了すると、メモリは解放されますか?
コード:
c - 動的に割り当てられた構造体の配列の SegFault、C
これは、parser.c ソース ファイルから呼び出される関数です。
私は最初に create_FigArray を呼び出します...
ここではセグフォルトは発生しません...しかし、電話をかけます...
パラメータは実際には変数を介して渡されますが、それらが適切なパラメータであることを示し、渡される値の例を示したかっただけです。とにかく当たる
ここでセグメンテーション違反が発生するはずですが、なぜですか?!
これを回避する方法を助け、説明し、示してください。ありがとうございました。
c - 柔軟な配列メンバーで動的に割り当てられた構造体を解放する
次のように定義されたデータ構造があります。
データ配列は、最初はサイズ1である必要がありますが、増加する可能性があります。
struct varr *
私が使用するスペースを割り当てるとき
スペースを再割り当てしてデータ配列のサイズを増やすとき、私は使用します
私の質問は、「この構造に割り当てられたメモリをどのように解放する必要があるか」です。
簡単なことを試しましたfree(p);
が、memcheckによるとこれによりメモリリークが発生します。この目的のためにデータを構造化する方法、またはメモリを割り当てる方法に根本的な問題がありますか?
==注==
明示的に宣言された配列の代わりにポインターを使用することで問題を解決しました。しかし、なぜこれが機能しないのかについての簡潔な答えにまだ興味があります。
assembly - アセンブリで動的配列を作成する
アセンブリでプログラムの途中で動的配列を作成する方法は? このコードを試してみましたが、うまくいきませんでした
この問題を解決する方法を知っていますか?
c - 複数の入力にmalloc()を使用していますか?
了解しました。malloc
またはcalloc
動的割り当てに使用できることは知っていますが、CIの初心者として、TC++の例のように複数の入力を入力するために割り当てたメモリの使用方法がわかりません。このコードがあります。
このように、コードでは、Helloを割り当てたメモリに配置します。これにより、さらに4つの文字スペースが残り、これらのスペースにもデータを追加する必要があります。
ユーザーが入力の数について尋ねられ、10または100と言うと、プログラムがデータを入力して保存し、そのデータを画面に出力するときに、このアイデアを実装したいと思います。
c++ - C++ で動的次元サイズの配列を作成するにはどうすればよいですか?
いくつかのファイルを表す配列 (またはベクトル?) を作成しようとしています。
基本的に、入力ファイルの数は可変です。各ファイルの各行は、カスタム オブジェクトとして扱うことができます (それぞれを「シンボル」と呼んでいます)。各ファイルの行数は可変です。
だから私はこの種の表現を続けたいと思っています:
配列[x][y]
ここで、x はファイルを参照し、y はそのファイル内の行を参照します。
これらの行に沿って何かを提案するstackoverflowに関するいくつかのトピックを見ました
ビルド時に奇妙なエラーメッセージが表示されます:
これについてどうすればいいですか?それとも、さらに処理するために読み戻す前に、情報を一時的にファイルに保存する方がよいでしょうか?
c++ - 動的オブジェクトのデストラクタの例外
私は通常「そうしないでください」と却下するこのフリンジの質問に出くわしましたが、標準で満足のいく答えを見つけることができなかったので、誰かが理由を指摘していただければ幸いです。
デストラクタで例外をスローするクラスがあるとします。
このクラスの動的に割り当てられたインスタンスを削除すると、動的に割り当てられたメモリはどうなりますか?
割り当て解除関数は呼び出されますか?なぜ?ブロックに追加operator delete(p);
してこのコードを正しくすることはできますか?catch
メモリの割り当てを自動的に解除しないように見えるGCCで小さなテストを実行しました。(これをコンストラクターの例外と比較してください。この場合、割り当て解除関数が呼び出されることが保証されます(存在する場合)。)
c++ - 初期化され、整列されたメモリの割り当て
開始アドレスをキャッシュラインサイズに合わせる必要がある配列を割り当てる必要があるプログラム(C ++)を作成しています。これらの配列を割り当てるときは、メモリもゼロに初期化する必要があります。
現在、posix_memalign関数を使用して動作しています。これは、メモリで整列された配列を取得する場合にうまく機能しますが、配列は初期化されていません。配列を初期化するときに配列をゼロにするために使用できるより良い関数はありますか、それとも私のためにそれを行うために別のループを書くために解決する必要がありますか?
c - C で動的に割り当てられたメモリのミューテックス
Thread Synchronization
Unix環境でのAdvance Programmingという本 を読んでいます。
このセクションでは、動的に割り当てられたオブジェクトでミューテックスを使用する例を示します。私も同じように疑問を持っています。
ここで、私の疑問を説明するために起こっているイベントのタイムライン(上から下) を共有しています。
- スレッド 1 が作成されました。
- Thread1 はミューテックス変数を作成し、それを初期化し、グローバル リストに配置して、他のユーザーが使用できるようにします。
- ここで、Thread1 は共有データ構造を使用するためにロックを取得しました
ds
。スレッド 1 は で非常に大量の作業を行う必要がありますds
。つまり、スレッド 1 はこのロックを長時間取得します。 - Thread1 がまだロックを取得している間に、Thread2 が作成されます。
- 現在、Thread2 も ds を使用したいと考えています。
- そのため、Thread2 はまず、ds への参照が増加したことを示すカウンターをインクリメントする必要があります。これを行うには(本によると)
mutex_t
、カウントをインクリメントする前に 、まず同じ変数を使用してロックを取得する必要があります。 - ただし、Thread1 は既にこの
mutex_t
変数のロックを取得しているためlock()
、カウントをインクリメントする前に Thread2 を呼び出すと、Thread1 がロックを解除するまで待機する必要があります。
疑問:
- 彼が話しているグローバルリストについて(リストを作成し、その参照をすべてのスレッドまたは特定のリストに渡すことを意味します)?
- Thread1 がロック変数を作成すると、カウントが 1 に設定されます。その後、Thread2 は、このカウントを 2 にインクリメントするのを待っています。しかし、現在の作業を行った後、Thread1 が ds を使用する必要がなかった状況を想定します。
foo_rele()
したがって、ロックを解除する前にカウントを減らすか、最初にロックを解除してから再度ロックを呼び出してカウントを減らします。Thread2 がカウントをインクリメントする前に、Thread1 がカウントをデクリメントする可能性があります。はいの場合 (私によると)、私のデータ構造は破棄されますか? したがって、この本の例にはわずかな誤りがあると思います。別の mutex_var を使用してカウントをインクリメントした方がよいでしょうか?
c++ - 動的に char 配列を繰り返し割り当てると、問題が発生しますか?
C++ の疑似コード
したがって、基本的に、データは毎回異なるサイズの新しい配列に繰り返し割り当てられます。ただし、以前の割り当ては常に最初に割り当て解除されます。
これはメモリの断片化につながりますか?
私は C++ でのメモリ管理にあまり詳しくありません。私の直感は、これは良い考えではないと言っています。