2012-04-03 67 views
0

,因爲我們都知道數組的聲明是非常簡單的陣列,C++ CLR

type name[size]; 

但是當我編譯我的C++的CLI/WinForm的它不工作,我已經找到了following MSDN上其解釋這新的syntex,但對於一些reasone我仍然得到奇怪的錯誤。

當我按照以下方式聲明數組時,它的編譯沒有問題,但是當數組被操作時程序崩潰。 (我有一個按鈕,仍然是相同的測試,它在一個簡單的程序)

array<int>^ aiArray; //declaration - no problem 
aiArray[0] = 5; //after executing it the program crash 

這裏是崩潰後,我得到的錯誤:

An unhandled exception of type 'System.NullReferenceException' occurred in test.exe 
Additional information: Object reference not set to an instance of an object. 
+2

冒着明顯的風險,你需要'array '的*實例*,而不僅僅是一個變量聲明。請參閱http://msdn.microsoft.com/en-us/library/kewsb8ba(v=vs.80).aspx – 2012-04-03 17:18:05

+0

我還沒有驗證,但你可以用'array aiArray(size);聲明變量。 '。 '^'字符表示託管引用,實際上是指向.NET對象的指針。所以你有問題的代碼大致相當於'int * aiArray; aiArray [0] = 5;' – 2012-04-03 20:48:38

回答

4

您需要創建數組,而不僅僅是聲明一個局部變量。試試這個:

array<int>^ aiArray; 
aiArray = gcnew array<int>(10); 
aiArray[0] = 5; 

如果你對C#很熟悉,這應該看起來很熟悉。如果您熟悉C++而不熟悉C#,那麼發生了什麼:您擁有的大致相當於非託管C++中的int* aiArray;。在使用非託管陣列之前,您需要執行aiArray = new int[10];