2011-10-17 34 views
1

我有一個大陣列。我將這個數組賦給一個函數,該函數返回一個指向數組中特定元素的指針。或者,至少這是應該發生的事情。相反,函數返回後我得到的指針是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

fixed完成的鎖定只會持續到受控語句(或塊)的末尾。因此,您的代碼相當於:

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

函數返回後,鎖定不再有效。從the documentation

語句中的代碼被執行後,任何固定的變量是取消固定和受垃圾收集。因此,不要指向固定陳述之外的那些變量。

+0

所以我應該也修復數組在Main? – extracrispy

+1

當然,這聽起來像一個似是而非的方法。如果你這樣做會發生什麼? –

相關問題