問題タブ [dangling-pointer]

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.

0 投票する
3 に答える
1441 参照

c++ - インタープロセス COM オブジェクトに対して、QueryInterface を使用せずに IDispatch* を IUnknown* にキャストしても安全ですか?

COMインタープロセスオブジェクトを扱う場合、 を使用せずに をにキャストIDispatch*しても安全ですか?IUnknown*QueryInterface

ここで、IDispatchオブジェクトは他のプロセスから取得されますOtherProcess.exe。そして、私の同僚は、 を得るために に電話QueryInterfaceするべきだと言っています。IDispatchIUnknown

現在、私はやっています:

彼の提案に関する私の問題: 私は、OtherProcess.exe がクラッシュしたか強制終了された場合 (アクセス違反) に対処しています。この存在しない OtherProcess.exe からオブジェクトをカプセル化するInvokeon のような関数を呼び出すと、これらのアクセス違反が引き起こされるようです (編集:コメントと回答は、この最新の仮定が完全に誤りであったことを示しています!)。IDispatch

そのため、 as パラメーター::CoIsHandlerConnected(pIUnknown);を取るアプリケーションのテストを保護しようとしています。IUnknown

しかし、同僚が私にアドバイスするように、QueryInterfaceを呼び出すことによって、私が解決しようとしている同じ問題に戻ることを 恐れています: これは、もはや存在しないオブジェクトを処理します。 (もう一度編集します。この仮定も誤りです)。IDispatchIDispatchQueryInterfaceIUnknown

キャストをするだけで本当に間違っていますか?死んだプロセス間COMオブジェクトを処理する一般的な方法は何ですか?

これは、OAIdl.h 内の の定義の始まりであり、IDispatchから派生したものとして宣言されていIUnknownます。

0 投票する
1 に答える
26 参照

pointers - 参照はポインターの問題を解決しますか?

こんにちは私は参照を使用して非常に混乱しています。ポインターの代わりに参照を使用すると、ダングリングやメモリ リークの問題さえも解決するでしょうか?

0 投票する
1 に答える
411 参照

delphi - Delphi のダングリング ポインタ

私はインターフェイスを使用していません (そのため、オブジェクトには参照カウントがありません)。オブジェクトは他の多くのオブジェクトから参照される可能性があり、ダングリング ポインターを処理する必要があります。FreeAndNil() は、複数の参照の問題を解決しません。オブジェクトが破棄されると、それを参照するすべてのポインターが自動的に nil に設定される必要があります。あるいは、C++ の std::weak_ptr の Expired() メソッドのようなものかもしれません。

これを行うために「弱いスマートポインター」を実装できますが、それが複雑すぎる実装であるかどうかはわかりません。別の解決策を提案しますか?これは私が考えているテストされていない可能な解決策です:

0 投票する
5 に答える
5316 参照

c++ - ポインターの削除と nullptr への設定の違いは何ですか?

と言っdelete pointerpointer = nullptr同じですか?おそらくそうではありませんが、後者はメモリを解放しますか? delete pointer; pointer = nullptr/はどうpointer = nullptr; delete pointerですか?通常は別の機会に削除され、通常の削除でエラーが発生する場合に、必要に応じて途中でポインターを削除する安全な方法を作成するためにそれを使用しないのはなぜですか?

0 投票する
6 に答える
2461 参照

c++ - unique_ptr::operator*() の安全な代替手段がないのはなぜですか?

std::vectorat()は、の安全な代替手段としてメンバー関数を持っているoperator[]ため、境界チェックが適用され、ダングリング参照が作成されません。

ただし、std::unique_ptr対応する機能がありません。

このような安全な代替手段があればstd::unique_ptr、たとえば member ref()(and cref()) のように、ぶら下がっている参照を返すことはなく、例外をスローすることができれば、それは素晴らしいことです。可能な実装:

標準がこの種のものを提供しない正当な理由はありますか?

0 投票する
3 に答える
162 参照

c++ - 異なるデータ型のダングリング ポインターが指すメモリ位置にデータが書き込まれるとどうなるか

ポインタのデータ型が新しく入力されたデータと同じであればエラーにはならないと思いますが、ポインタのデータ型が異なると型の不一致が発生します。私は、コンパイラがそれについて何かをするか (最初にダングリング ポインターを削除するなど)、または単にエラーを与えるかどうか疑問に思っていました。

0 投票する
1 に答える
512 参照

c++ - flatbuffers: root-pointer 経由でバッファを削除することは可能ですか?

私はフラットバッファライブラリを使い始めています。しかし、バッファの削除に関しては、私にとって不快に感じることがあります。ルートポインタ要素を介してバッファを削除する方法がわかりません。これが可能であれば、ルート ポインターは割り当てられたスペースの所有権を取得でき、寿命の問題 (ルート ポインターのぶら下がり、メモリ リークなど) を気にする必要はありません。

Q: 可能ですか (おそらく、モンスターは可変ではないなどの制限の下で)、delete_buffer のようなものを書きます