我正在尝试在 C# 中实现 Knuth-Morris-Pratt 算法,类似于纯 C 中的实现。
请不要告诉我关于 Regex 和在 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
尝试取消引用空对象引用时引发的异常。
我完全不明白为什么这些东西在我的 C# 代码中为空?
我已经定义了指向 int[] 数组的 *d 指针,并使用 new[] 运算符为此分配了内存,那么为什么它告诉我,如果内存已经分配,我正在取消引用空对象引用?
还有一个关于在 C# 中显式删除指针的问题。
我知道,它可以用fixed来完成,但是如果我想要这个而不使用 this 关键字呢?
我记得,我必须为此调用 Dispose() 方法(但对于 *d,我还没有找到此方法),设置为 null 并调用 GC.Collect()。这种方式是正确的方法吗?
谢谢,
此致!