2012-04-03 74 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];