問題タブ [memory-management]
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++ - What is the difference between new/delete and malloc/free?
What is the difference between new
/delete
and malloc
/free
?
Related (duplicate?): In what cases do I use malloc vs new?
.net - ネイティブ ライブラリの呼び出しが原因でマネージド コードがメモリ リークしているかどうかを確認するにはどうすればよいですか?
ネイティブ ライブラリを呼び出すマネージド DLL があります。通常、このネイティブ ライブラリは IntPtrs を返します。これらをネイティブ ライブラリの他のメソッドに渡して処理を実行したり、IntPtr に関連付けられたインスタンスを解放するようライブラリに指示したりできます。ただし、この方法で解放する必要があるのは一部のインスタンスのみであり、他のインスタンスはライブラリによって管理されます。問題は、どのインスタンスを解放する必要があり、どのインスタンスを解放してはならないかについて、ドキュメントが常に明確であるとは限らないことです。
私が知りたいのは、私のコードが解放する必要のあるポインターへの参照を保持しているかどうかを確認できる方法があるかどうかです。そのため、メモリ リークが発生していますか?
cocoa - _NSAutoreleaseNoPoolエラーのあるNSThread
私はインターネットにファイルを保存する方法を持っています、それは機能しますがただ遅いです。次に、ユーザーインターフェイスをよりスムーズにしたいので、遅いタスクを処理するためにNSThreadを作成します。
次のようなエラーのリストが表示されます。
NSThreadがない場合、次のようなメソッドを呼び出します。
そして、NSThreadを使用してメソッドを呼び出すために以下を使用しました。
ありがとう。
iphone - ナビゲーションコントローラーでUIViewControllersをメモリ管理するにはどうすればよいですか?
ええ、私はこのクレイジーな iPhone の世界では Java 派です。メモリ管理に関しては、自分が何をしているのかまだよくわかりません。
ナビゲーション コントローラーを使用するアプリがあり、次のビューに進むときは、次のようなコードがあります。
現在、メモリ管理に関するAppleの基本的なルールに従っています
名前が「alloc」または「new」で始まるメソッド、または「copy」を含むメソッド (たとえば、、、または ) を使用してオブジェクトを作成した場合、またはオブジェクトにメッセージを送信した場合、オブジェクトの所有権を
alloc
取得newObject
しmutableCopy
ますretain
。release
またはを使用して所有しているオブジェクトの所有権を放棄する責任がありますautorelease
。それ以外のオブジェクトを受け取った場合は、それを解放してはなりません。
myController
私にとって、それは私が をリリースするか、メッセージを与えるべきであることを意味しautorelease
ます。しかし、それをしようとすると、ビューをスタックからプッシュおよびポップするときに、アプリケーションがクラッシュしてしまいます。
これは私には適切な匂いがしませんでしたが、Instruments を実行すると、メモリ リークが発生していないと主張されます。
だから私は私の質問は
- 私はこれを正しく行っていますか?
- ナビゲーション コントローラーが MyViewController の所有権を取得して、メモリ リークがないことを説明していますか?
- ルート ViewController のインスタンス変数に myController を割り当てる必要がありますか? その場合、retain とマークされ、ルートの dealloc メソッドで解放します
c++ - なぜ「delete[]」演算子が必要なのですか?
これは、しばらくの間私を悩ませてきた質問です。delete
C ++は、演算子(角かっこなし)が演算子でも機能するように設計されているべきだといつも思っていましたnew[]
。
私の意見では、これを書く:
1つの要素の配列を割り当てることと同等である必要があります。
これが当てはまる場合、delete
演算子は常に配列を削除している可能性があり、演算子は必要ありませんdelete[]
。
delete[]
演算子がC++で導入された理由はありますか?私が考えることができる唯一の理由は、配列の割り当てはメモリフットプリントが小さいため(配列サイズをどこかに保存する必要がある)、delete
vsを区別することdelete[]
はメモリの最適化が小さいことです。
c++ - オブジェクトの配列を動的に割り当てる
動的に割り当てられた配列を含むクラスがあります。
しかし今、これらのクラスの動的に割り当てられた配列を作成したいと考えています。これが私の現在のコードです:
しかし、これはひどく爆発します。(呼び出しで)作成された新しいA
オブジェクトは、ループの反復が終了すると破棄されるため、これはそのインスタンスの内部が-ed になることを意味します。A(3)
for
myArray
A
delete []
それで、私の構文はひどく間違っているに違いないと思いますか? やり過ぎと思われる修正がいくつかあると思いますが、避けたいと思っています。
- のコピー コンストラクタを作成します
A
。 vector<int>
andを使用vector<A>
するので、これらすべてについて心配する必要はありません。- オブジェクト
arrayOfAs
の配列ではなく、ポインターの配列にします。A
A*
これは、内部動的割り当てを持つものの配列を動的に割り当てようとするときに実際に機能する構文がある初心者向けのものだと思います。
(また、私が C++ を使用してからしばらく経っているので、スタイルの批評も高く評価されています。)
将来の視聴者向けの更新: 以下の回答はすべて非常に役に立ちます。コード例と便利な「4 のルール」により、Martin のコードは受け入れられますが、すべてを読むことを強くお勧めします。何が間違っているかを簡潔に述べた優れたものもあれば、vector
s がどのように、そしてなぜ良い方法なのかを正しく指摘しているものもあります。
php - PHP アプリのメモリ使用量を視覚的に分析するツール
PHP アプリケーションによるメモリ使用量の分析を容易にするフリーウェアまたは商用のものはありますか? xdebug が関数呼び出しによるメモリ使用量を示すトレース ファイルを生成できることは知っていますが、グラフィカル ツールがないとデータを解釈するのは困難です。
理想的には、総メモリ使用量だけでなく、ヒープ上にあるオブジェクトと、Jprofilerのように誰がそれらを参照しているかを表示できるようにしたいと考えています。
delphi - Delphiのメモリマネージャによって作成されたオブジェクトをキャッシュする価値はありますか?
何千ものオブジェクトを作成および破棄するアプリケーションがあります。オブジェクトをキャッシュして再利用する価値がありますか、それともDelphiのメモリマネージャが十分に高速であるため、オブジェクトを複数回作成および破棄することは、(キャッシュを追跡するのではなく)それほど大きなオーバーヘッドではありません。パフォーマンスを向上させます。
delphi - Delphiのメモリマネージャがシャットダウン時に誤ったメモリリークを報告するのはなぜですか?
シャットダウン時に、特定のオブジェクトの3つがリークしているというメモリリークメッセージが表示されます。ただし、これには2つの問題があります。
それは断続的にのみ発生します。プログラムを実行し、まったく同じ一連の手順を実行して(データファイルを開き、表示して、再度シャットダウンする)、メッセージが表示される場合と表示されない場合があります。これらのコードパスに沿って、random()またはその他の「非決定論的」ロジックを呼び出す必要はありません。
コードレビューによると、報告されたメモリリークは不可能です。オブジェクトは特定のクラス内でのみ作成され、そのクラスのデストラクタ内で適切に解放されます。(そして、親クラスの3つ以上のオブジェクトをインスタンス化します。また、クリーンアップ中に例外が発生することはありません。)
このクラスのコンストラクタとデストラクタにトレース出力を追加すると、メモリマネージャが別の方法で報告している場合でも、作成されたすべてのオブジェクトが破棄されていることがわかります。したがって、これは誤検知であると結論付けることしかできません。ただし、コンストラクターに「RegisterUnexpectedMemoryLeak(self)」を追加すると、メッセージが消えます。
誰かが以前にこのようなものを見たことがありますか?何がそれを引き起こしているのか考えていますか?オブジェクトがリークしていない可能性があると確信しているので、代わりに何が起こっているのでしょうか。
c - 構造体の動的サイズの配列を作成するにはどうすればよいですか?
構造体の配列を作成する方法を知っていますが、サイズは事前定義されています。しかし、配列が大きくなるような構造体の動的配列を作成する方法はありますか?
例えば:
これは可能ですか?
私はこれを研究しました:words* array = (words*)malloc(sizeof(words) * 100);
100 を取り除き、入ってくるデータを保存したいです。したがって、76 フィールドのデータが入ってくる場合、100 ではなく 76 を保存したいと思います。どのくらいのデータが入ってくるかわからないと仮定しています。私のプログラムに。上で定義した構造体では、最初の「インデックス」を次のように作成できます。
ただし、後で配列に要素を動的に追加したいと考えています。問題の領域を十分に明確に説明したことを願っています。主な課題は、2 番目のフィールドを動的に追加することです。少なくとも、それが当面の課題です。
しかし、私は少し進歩しました:
私はいくつかのエラーチェックを行い、これが私が見つけたものです。x のメモリを解放した後、次を追加します。
次に、 x を印刷しようとすると、必要なエラーが発生します。少なくとも私のコンパイラでは、 free 関数が機能していないということですか? 私はDevCを使用していますか??
ありがとう、私は今理解しました:
FirstName は、malloc によって割り当てられていない char の配列へのポインターです。ポインターのみが割り当てられており、free を呼び出した後、メモリは消去されず、ヒープで利用可能であるとマークされます。後で書きます。– マット・スミス
アップデート
モジュール化して、構造体の配列の作成を関数に入れようとしていますが、何も機能していないようです。私は非常に単純なことをしようとしていますが、他に何をすべきかわかりません。これは前と同じ行に沿っており、データをロードしている別の関数 loaddata と、印刷を行う必要があるメソッドの外にあります。どうすればそれを機能させることができますか?私のコードは次のとおりです。
この単純なテスト コードがクラッシュしており、その理由がわかりません。バグはどこですか?