純粋なCでの実装と同様に、C#でKnuth-Morris-Prattアルゴリズムを実装しようとしています。
正規表現とC#のメモリでの作業から解放されていることについて教えてください。なぜなら、このトピックの目的は、C#機能の真の有用性ではなく、C#で正確にポインターを使用する作業と、そのような機能を正確に学習するメモリ作業についてです。
C#と純粋なCの両方での実装を紹介します。
Pure Cのバージョンには問題はありません。問題なく動作しますが、C#バージョンでは動作しません。
この行のC#に問題があります:
int*[] d = new int*[M * sizeof(int)];
*d[0] = 0;
NullReferenceExceptionが0の値を*d[0]に設定して処理されたことがわかりました。
私はこのリファレンスを読みました:
http://msdn.microsoft.com/en-en/library/system.nullreferenceexception.aspx
nullオブジェクト参照を逆参照しようとしたときにスローされる例外。
私のC#コードでこのようなものがnullである理由がまったくわかりませんか?
int[]配列への*dポインターを定義し、new []演算子を使用してこれにメモリを割り当てましたが、メモリがすでに割り当てられている場合、nullオブジェクト参照を逆参照していると表示されるのはなぜですか?
また、C#でポインターを明示的に削除することについての質問があります。
固定で実行できることは知っていますが、このキーワードを使用せずにこれが必要な場合はどうでしょうか。
私が覚えているように、これにはDispose()メソッドを呼び出す必要があります(ただし、* dの場合、このメソッドは見つかりませんでした)。nullに設定してGC.Collect()を呼び出します。この方法は正しい方法ですか?
ありがとう、
よろしくお願いします!