【问题标题】:How do I keep a pointer to an element in an array that is returned from a function?如何保留指向从函数返回的数组中的元素的指针?
【发布时间】:2011-10-17 01:15:09
【问题描述】:

我有一个大数组。我将此数组提供给一个函数,该函数返回指向数组中特定元素的指针。或者,至少这是应该发生的。相反,我在函数返回后得到的指针是 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
}

【问题讨论】:

    标签: c# arrays pointers


    【解决方案1】:

    我会先尝试给数组一些值。如果您只是写出一个指向其中没有数据的内存位置的指针,则无法真正保证您会返回什么。

    【讨论】:

      【解决方案2】:

      fixed 完成的固定只持续到受控语句(或块)结束。所以你的代码相当于:

      fixed(int* p = array[4]) {
          return p;
      }
      

      函数返回后,固定不再有效。来自the documentation

      语句中的代码执行后,所有固定的变量都将被取消固定并进行垃圾回收。因此,不要指向固定语句之外的那些变量。

      【讨论】:

      • 那么我是否也应该修复 Main 中的数组?
      • 当然,这听起来像是一种合理的方法。如果你这样做会发生什么?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-06-25
      • 1970-01-01
      • 2017-03-22
      • 2011-01-12
      • 1970-01-01
      • 2015-08-07
      • 1970-01-01
      相关资源
      最近更新 更多