Sec*_*ret -4 c# pointers nullreferenceexception
我试图在C#中实现Knuth-Morris-Pratt算法,类似于纯C中的实现.
请不要告诉我关于正则表达式和C#中的内存工作.因为,本主题的目的不是C#特性的真实和有用,而是关于C#中指针的工作,以及关于学习这些特性的内存工作.
让我向您展示C#和纯C的实现.
Pure C http://ideone.com/FVAzU
我对Pure C中的版本没有任何问题,它没有问题,但没有C#版本.
我在这行上遇到了C#的问题:
int*[] d = new int*[M * sizeof(int)];
*d[0] = 0;
Run Code Online (Sandbox Code Playgroud)
我正在捕捉NullReferenceException是通过将0值设置为*d [0]来处理的.
我看过这个参考:
http://msdn.microsoft.com/en-en/library/system.nullreferenceexception.aspx
尝试取消引用空对象引用时引发的异常.
我完全不明白为什么这个东西在我的C#代码中是空的?
我已经定义了*d指向int []数组的指针并使用new []运算符为此分配了内存,为什么它告诉我,如果已经分配了内存,我将取消引用空对象引用?
还有一个关于在C#中明确删除指针的问题.
我知道,它可以用固定的方式完成,但如果我想要这个而不使用这个关键字?
我记得,我必须为此调用Dispose()方法(但是我没有找到这个方法),设置为null并调用GC.Collect().这是正确的方法吗?
谢谢,
最好的祝福!
int *d = (int*)malloc(M * sizeof(int));为M int值分配内存.d指向分配的内存.所以它不是一个指针数组,而是一个指向数组的指针.
在C#中,您可以创建一个M int值数组,并在变量中存储对该数组的引用,如下所示:
int[] d = new int[M];
d[0] = 0;
Run Code Online (Sandbox Code Playgroud)
该数组是一个托管对象; 你不需要手动释放它,处理它或调用垃圾收集器.
您在代码中看到的NullReferenceException是由您尝试取消引用指针引起的,该指针由数组创建表达式d[0]初始化null.
| 归档时间: |
|
| 查看次数: |
203 次 |
| 最近记录: |