問題タブ [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 - realloc() ダングリング ポインターと未定義の動作
メモリを解放すると、そのメモリを指すポインターはどうなりますか? それらはすぐに無効になりますか?後で再び有効になった場合はどうなりますか?
確かに、ポインターが無効になり、再び「有効」になる通常のケースは、以前に使用されたメモリに別のオブジェクトが割り当てられることです。ポインタを使用してメモリにアクセスすると、それは明らかに未定義の動作です。ダングリング ポインター メモリの上書きレッスン 1 です。
しかし、同じ割り当てに対してメモリが再び有効になったらどうなるでしょうか。それを実現するための標準的な方法は 1 つだけですrealloc()
。malloc()
'd メモリ ブロック内のどこかに offset へのポインタがある場合> 1
、 を使用realloc()
してブロックをオフセット未満に縮小すると、ポインタは明らかに無効になります。その後realloc()
、ダングリング ポインターが指すオブジェクト型を少なくともカバーするようにブロックを再度拡張し、どちらの場合もrealloc()
メモリ ブロックを移動しなかった場合、ダングリング ポインターは再び有効になりますか?
これは非常にまれなケースであるため、C または C++ 標準を解釈して理解する方法がよくわかりません。以下はそれを示すプログラムです。
c++ - 暗黙のコピーコンストラクターが呼び出されたときのダングリングポインターを理解する
私はダングリングポインターの概念を実証しようとしているので、それにプログラムを書いています。
クラス変数としてポインターがあり、独自のコピーコンストラクターを記述していない場合、ダングリングポインターの概念につながる可能性があるとします。
暗黙のコピー コンストラクターは、要素のメンバーごとのコピー (浅いコピー) を行います。そのため、1 つのオブジェクトがスコープ外になると、ダングリング ポインターの問題が発生します。
では、ぶら下がっているポインターを示すために私が書いたこのプログラムは正しいですか? ideone.com でコンパイルすると、実行時エラーが発生しました。
c - C 解放チェックが機能しない
構造体を解放するメソッドを作成しました。今、私は問題を抱えています。このメソッドを 2 回呼び出すと、エラーが発生します。しかし、構造体に何かがあるかどうかを確認するので、エラーが発生する可能性があるかどうかはわかりません。
私の構造体:
私の無料の方法:
追加の方法:
私にエラーを与える方法:
c++ - メモリ割り当てスタック
main
スタックでは、関数のスタック フレームと呼ばれるメモリが予約されmain
ます。
関数を呼び出すとAdd
、スタックの一番上にメモリが予約されます。Add
関数スタック フレームでは、とa
はb
ローカル ポインターでありc
、合計を計算して参照を返す整数です。c
関数のローカル変数ですAdd
。
関数のAdd
実行が完了すると、スタック内のメモリ空間も割り当て解除されるため、main
with pointerp
でこのアドレスにアクセスしようとすると、アクセスしようとしているのは基本的に割り当て解除されたスペースです。コンパイラは警告を出しますが、それでも値 5 が正しく出力されるのはなぜですか?
それに対する答えは、マシンがメモリ空間の割り当てを解除しなかったということかもしれません。それ以上の機能がなかったため、メモリ空間が必要であると見なされなかったからです。しかし、別の関数を書くと、呼び出しスタック内の関数Hello
のスペースを確実に解放する必要Add
がありますが、プログラムはまだ出力します
ヒープのように、解放後にポインターを割り当てる必要があるためnull
ですか、それともアクセスできますか? ここにそのようなものが関係していますか?
c++11 - ダングリング ポインタとメモリ リークの違いは何ですか?
私は C++ を初めて使用するので、動的に割り当てられた配列の外側を指しているため、以下のコードがダングリング ポインターまたはメモリ リークの例であるかどうかを尋ねたいと思います。
c - SQLite SQLITE_STATIC ローカル変数の問題
いくつかのベンダー コードを見ていると、次のようなクエリがあります。
後でそのクエリが実行されます。問題は、このクエリが一致する必要があるにもかかわらず、一致しないことです。
問題はsqlite3_bind_text
、ローカル変数をバインドし、SQLite が元のローカル変数へのポインターを保持していることだと思います。そのため、範囲外になると、すでに上書きされている可能性があります。修正はSQLITE_TRANSIENT
代わりに使用するようです。誰かが私の考えを確認できますか? それとも私は基地外ですか?
もう 1 つの興味深い問題は、ベンダーがそれを再現できなかったことです。幸運?
c++ - ダングリングポインタを比較することは合法ですか?
ダングリングポインタを比較することは合法ですか?
p
との両方q
が既に消えたオブジェクトを指している点に注意してください。これは合法ですか?