問題タブ [null-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++ - NULL ポインターでのクラス メンバーへのアクセス
私は C++ を試していましたが、以下のコードが非常に奇妙であることがわかりました。
vtable ルックアップが必要であり、有効なオブジェクトでしか機能しないため、仮想メソッド呼び出しがクラッシュすることはわかっています。
次の質問があります
say_hi
非仮想メソッドは NULL ポインターでどのように機能しますか?- オブジェクトはどこ
foo
に割り当てられますか?
何かご意見は?
c++ - 0Lを使用してC++でポインターを初期化すると、問題が発生する可能性がありますか?
この質問では、初期化子を使用してポインターをnullに設定します。の値を使用する代わりに、の0
値0L
が使用されます。0
正確なnullポインター表現は実装固有であるため、nullポインターには正確に使用する必要があることを読みました。
0L
ポインタをnullに設定するために使用すると、移植中に問題が発生する可能性がありますか?
c - C89:アクセス違反の読み取り値0x00(mallocの難易度)
Visual Studio 2010 Ultimate Beta(Win 7)でC89を開発しています。malloc()
正しく使っていないと思います。私はCに不慣れですので、初心者の質問を許してください。
**argv
私のプログラムの目標は、ツリーを使用する際の単語の出現をカウントすることです。
hist.c
tree_add.c:
私が得るエラーは次のとおりです。
0xC0000005:アクセス違反の読み取り場所0x00000000。
オンラインで調べたところ、このエラーは不適切に割り当てられたメモリにアクセスしようとしたことが原因のようです。だから私は何が間違っているのですか?
コメントを反映するように更新されたコード。今、私は新しい問題を抱えています。value == "x"
この状態は、次の場合に正しく機能しません。tree->value == "x"
デバッガーでtree->value
は0x00553373 "x" char *
、それはですが、value
はです0x00553375 "x" char *
。16進値は最後の桁で異なります。ここで何が問題になっていますか?文字列の同等性を誤ってチェックしていますか?
c++ - nullインスタンスでメンバー関数を呼び出すと、未定義の動作が発生するのはいつですか?
次のコードを検討してください。
nullポインタに(b)
対応するメンバーがないため、クラッシュすることが予想されます。x
実際には、ポインタが使用されることはない(a)
ため、クラッシュしません。this
nullの逆参照は常に未定義の動作であると言われるため(b)
、this
ポインタ((*this).x = 5;
)を逆参照し、 this
nullであるため、プログラムは未定義の動作に入ります。
(a)
未定義の動作になりますか?両方の関数(およびx
)が静的である場合はどうでしょうか?
c++ - NULL ポインターを作成するのはどれですか?
標準では、null ポインターを逆参照すると、未定義の動作が発生することが示されています。しかし、「ヌルポインタ」とは何ですか? 次のコードでは、「ヌル ポインター」と呼んでいます。
私の考えでは、null ポインターの逆参照は最後のケースでのみ行われます。私は正しいですか?C++ 標準によると、コンパイル時の null ポインターと実行時の違いはありますか?
iphone - 初期化されていないオブジェクト(nullポインター)でメソッドを呼び出す
- nilであるオブジェクト(ポインター)のメソッドを呼び出す場合(おそらく誰かがそれを初期化するのを忘れたため)、Objective-Cの通常の動作は何ですか?ある種のエラー(セグメンテーション違反、nullポインタ例外...)を生成するべきではありませんか?
- これが正常な動作である場合、プログラムが実行時に何らかのエラー/例外を発生させるように(コンパイラを構成することによって)この動作を変更する方法はありますか?
私が話していることをより明確にするために、ここに例があります。
このクラスを持つ:
この実装では:
プログラムのどこかで私はこれを行います:
android - Android - 画面の向きの変更に関するダイアログの処理
onCreateDialog および onPrepareDialog メソッドまたは Dialog クラスをオーバーライドしています。
Reto Meier の Professional Android Application Development book の第 5 章の例に従って、いくつかの XML データを取得し、ダイアログを使用して情報を表示しました。
私は基本的にそれに従っていますが、変数を次のように自分の XML スキーマに合わせて変更しました。
画面の向きを変更しようとするまで問題なく動作します。これを行うと、onPrepareDialog が呼び出されますが、すべての変数で null ポインター例外が発生します。
マニフェストで画面の向きを無視するようにアクティビティに指示しても、エラーは引き続き発生します。
したがって、本の例から何かが除外されていると思いますが、変数を保存するために別のメソッドをオーバーライドする必要がありますか?
以下を追加しました。
しかし、まだ Null Pointer 例外が発生しています
qt - QObject を使用したヌル パターン
(C++/Qt) QObject へのスマート ポインターがあります。QWeakPointer としましょう。なんらかの外部的な理由 (別のオブジェクトで発生する可能性があるもの、またはイベントが原因で発生する可能性があるもの) により、指定されたオブジェクトが破棄される可能性があります。私はスマート ポインターを持っているので、ダングリング リファレンスはないので問題ありません。しかし、ポインターが null かどうかを常に確認する必要があります。
これを常にチェックしないようにするためにヌルパターンを使用することを考えていますが、QObjectでこれが可能かどうか、または便利かどうかはわかりません。ポインタがオブジェクトを指し、それが破壊された場合、スマートポインタはその指し示したオブジェクトをnullオブジェクトに変更するという考え方です。これは良い考えですか、それとも忘れて、ポインターが常に NULL かどうかを確認する必要がありますか?
例を示しましょう。ツールを使用して作業を行うワーカーがいます。
この場合、ツールはライブラリのパブリック ドメイン オブジェクトであり、ワーカーによって使用されます。私はそのようなライブラリを開発しています。そのため、作業員はドライバーを使用していますが、壊れて破損します。問題ない:
m_tool は 0 なので、単に何もしません。ただし、毎回 null ではないことを確認する必要があります。
NullTool オブジェクトがあるとします。
ツールが破棄されると、ポインターはスマートになり、NullTool インスタンスを指す必要があることを認識します。したがって、Worker::work() は次のように実装できます。
m_tool->use() は何もしない NullTool で呼び出されるため、ポインタが null でないことを確認する必要はありません。
これは良い考えですか?Qtが提供するスマートポインタクラスで可能ですか、それともQWeakPointerをサブクラス化する必要がありますか?
c++ - NULLポインタを削除しても安全ですか?
NULLポインタを削除しても安全ですか?
そして、それは良いコーディングスタイルですか?