問題タブ [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.
c++ - 関数からデータへの参照を返すと、ぶら下がり参照の問題が発生する
以下の 2 つのコード スニペットを確認してください。サンプル 2 では、ローカル変数の ref が渡されるため、明らかにダングリング参照の問題が存在しますが、サンプル 1 にも同じ問題があると思いますか? 私自身は、サンプル 1 が正しいと思います。データがデータ構造 ( ) にプッシュされている間に、参照が取得されました ( isstl::queue
の関数ヘッダー)。したがって、ここからデータを返す際に問題は発生しません。それともありますか?enqueue
void enqueue(const int &data)
&data
サンプル 1:
サンプル 2:
c++ - ローカル変数のメモリにそのスコープ外でアクセスできますか?
私は次のコードを持っています。
そして、コードは実行時の例外なしで実行されています!
出力は58
どうしてそれができますか?ローカル変数のメモリは、その関数の外ではアクセスできませんか?
c++ - N3290 C++ ドラフトでの一時的な有効期間
N3290 C++ ドラフトからのポイント、§ 12.2、5 番目のポイント、10 行目。
2 番目のコンテキストは、参照がテンポラリにバインドされる場合です。参照がバインドされている一時オブジェクト、または参照がバインドされているサブオブジェクトの完全なオブジェクトである一時オブジェクトは、次の例外を除き、参照の存続期間中持続します。
new-initializer (5.3.4) の参照への一時的なバインドは、new-initializer を含む full-expression が完了するまで持続します。[ 例:
— 例の終了 ] [ 注: これによりダングリング参照が導入される可能性があり、実装はそのような場合に警告を発行することをお勧めします。— エンドノート]
これは、C++03 と比較した場合の追加ポイントです。しかし、その例は私には理解できません。この点を他の例で説明していただけますか?
ダングリング参照と一時オブジェクトが何であり、std::pair
データ型が異なる可能性のある 2 つの値を保持することを知っています。
c - この場合、char[] と char* はどう違うのでしょうか?
このコードを実行すると、正常に動作string constant
し、画面に出力されます。
しかし、次の同様のコードを実行すると、機能せず、画面にゴミが表示されます。
その背後にある理由は何ですか?基本的に、どちらの関数も同じことを行います (つまり、「文字列」を返します) が、動作は異なります。何故ですか?
c++ - ポインターがぶら下がっているかどうかを確認する方法はありますか?
ポインターを使用してデータブロックにアクセスするコードがあります。まれに、データブロックのいくつかのメンバーが空であり、その結果、ポインターがぶら下がります。実際、正しいポインターを取得できますが、ポインターで何かをしようとするとプログラムがクラッシュします。
通常のアドバイスは、このタイプの使用を避けることです。しかし悲しいことに、私が使用しているフレームワークでは、このタイプのデータ アクセス方法を使用する必要があります。
ポインターを操作する前に、ポインターが無効かどうかを「確認」する方法はありますか? ポインターが NULL と等しくないことを確認しても、明らかに機能しませんでした。私もこれを試しました:
それは正しい方法ですか?
c++ - ワイルド ポインターを検出または防止する方法
この非常に単純なコードは、複雑な環境でワイルド ポインターが引き起こす種類の問題を示しています。
問題を検出または防止する方法はありますか? ここでスマートポインターが役立ちますか?
c# - C++ ではなく C# で安全、ポインター/参照の単純な戻り値
C++ コード:
C# コード:
この権利を理解していれば、C++ の例は適切ではありません。これは、p
が範囲外になり、関数がワイルド ポインター (ダングリング ポインター) を返すためです。
C# の例は問題ありません。参照がある限り、匿名の新しい人物はスコープ内に留まるからです。(呼び出し関数は 1 つ取得します。)
私はこれを正しく理解しましたか?
c++ - コールバック関数でオブジェクトを削除する
サーバー上のデータを保存/更新するために HTTP リクエストを送信しています。リクエストは非同期で行われ、完了するとコールバック関数が呼び出されます。アプリケーションがコールバックでクラッシュする場合があることを除いて、すべて正常に動作します。
これは私がやっていることです:
にはUser
、次のsaveOnServer()
方法があります。
コールバック:
サーバーにリクエストを送信した後、新しいユーザーを作成する必要がある場合があります。
問題は、このような場合、コールバックでユーザーを削除すると、ユーザーが既に削除されているため、アプリケーションがクラッシュすることです。もう 1 つの問題は、コールバックがユーザーを削除することですが、user
ポインターmain
はまだ何らかのアドレス (ダングリング ポインター) を指しているため、再度削除を試みます。
この場合、メモリを管理する最善の方法が何であるかはわかりません。コールバックでユーザーを削除したくzombie
ない場合があるため、配置しました。
c++ - このコンストラクタ初期化子は、ぶら下がっている参照を引き起こしていますか?
私はスタンレーB.リップマンによるC++プライマー第4版を勉強しています。セクション12.4.1で、作成者がコンストラクタ初期化子について話すとき、彼は次の例を示します。
これにより、一時的な、をri
指すぶら下がっている参照が発生する可能性があると思われます。ii
私は正しいですか?
c++ - ポインターに0を割り当てると、ダングリングポインターの解決策になるのはなぜですか?
ポインタに0が割り当てられている場合、OS /デバッガは何をしますか?