我有一个大阵列。我将此数组赋予一个函数,该函数返回指向数组中特定元素的指针。或者,至少这是应该发生的事情。相反,函数返回后得到的指针是0x0000。什么?!
int* getPtr(int[] array)
{
//there is guarenteed no indexOutOfBounds...
fixed(int* p = array[4])
return p;
}
Main()
{
int[] massive = new int[10];
int* p = getPtr(massive);
Console.WriteLine((int)p); //... address is 0... arg
}
答案 0 :(得分:0)
我首先尝试给阵列一些值。如果你只是写出一个指向没有数据的内存位置的指针,就没有真正保证你得到什么。
答案 1 :(得分:0)
由fixed
完成的固定仅持续到受控语句(或块)结束。所以你的代码相当于:
fixed(int* p = array[4]) {
return p;
}
函数返回后,钉扎不再有效。来自the documentation:
执行语句中的代码后,将取消固定任何固定变量并进行垃圾回收。因此,不要指向固定语句之外的那些变量。