C#プログラミングで発生した問題:System.NullReferenceExceptionとその反省
1120 ワード
最近Kinectの体感ゲームを書いていて、System.Null ReferenceExceptionという問題に遭遇しました.30分で解決したが、自分では多くの反省がある.
System.Null ReferenceExceptionのエラーはif(two[0]!=null)というコードで発生します.次のように変更します.
この問題が私に与えた収穫はC#のこの場所の設計がとても素晴らしいことです.私の前の書き方は非常に無責任だったからです.メモリにnewが新しい配列を出し、配列内の各オブジェクトにnewが出たが、私はこの配列に関数の戻り値を割り当てた.これにより、newから出たメモリが漏れ、ポインタが彼らを指していません.
この小さなゲームで私が浪費したのは2つのボーンのメモリ空間だけで、もし私がこのようなコードをサーバーに書くと、1つのアクセスが1つの配列のメモリ空間の浪費をもたらし、100万のアクセスがもたらしたメモリ空間の浪費は非常に大きく、結果は想像にたえない.C#ここのエラーは私に良いプログラミング習慣を身につけさせた.
メモリの漏洩を避けて、責任ある良い青年になります!
Skeleton[] two = new Skeleton[2];
two[0] = new Skeleton();
two[1] = new Skeleton();
two = GetTwoSkeleton(e);
if(two[0] != null)
textBlock.Text = " "+two[0].ToString();
System.Null ReferenceExceptionのエラーはif(two[0]!=null)というコードで発生します.次のように変更します.
Skeleton[] two = GetTwoSkeleton(e);
if(two[0] != null)
textBlock.Text = "@@"+two[0].ToString();
問題は順調に解決した.この問題が私に与えた収穫はC#のこの場所の設計がとても素晴らしいことです.私の前の書き方は非常に無責任だったからです.メモリにnewが新しい配列を出し、配列内の各オブジェクトにnewが出たが、私はこの配列に関数の戻り値を割り当てた.これにより、newから出たメモリが漏れ、ポインタが彼らを指していません.
この小さなゲームで私が浪費したのは2つのボーンのメモリ空間だけで、もし私がこのようなコードをサーバーに書くと、1つのアクセスが1つの配列のメモリ空間の浪費をもたらし、100万のアクセスがもたらしたメモリ空間の浪費は非常に大きく、結果は想像にたえない.C#ここのエラーは私に良いプログラミング習慣を身につけさせた.
メモリの漏洩を避けて、責任ある良い青年になります!