Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Variables 如何确定a c++/cli堆变量具有<;未定义值>; 我已经4年没用C++了,一个月前就回来了,这也是我第一次听说CLI扩展的地方。我仍然要习惯它,但这个网站帮助很大!非常感谢。无论如何,我找不到以下问题的答案:_Variables_C++ Cli_Heap_Undefined - Fatal编程技术网

Variables 如何确定a c++/cli堆变量具有<;未定义值>; 我已经4年没用C++了,一个月前就回来了,这也是我第一次听说CLI扩展的地方。我仍然要习惯它,但这个网站帮助很大!非常感谢。无论如何,我找不到以下问题的答案:

Variables 如何确定a c++/cli堆变量具有<;未定义值>; 我已经4年没用C++了,一个月前就回来了,这也是我第一次听说CLI扩展的地方。我仍然要习惯它,但这个网站帮助很大!非常感谢。无论如何,我找不到以下问题的答案:,variables,c++-cli,heap,undefined,Variables,C++ Cli,Heap,Undefined,当我声明一个变量时 int iStack; 然后声明它,但不定义它,因此它可以有如下任何值 iStack = -858993460 根据堆栈位置的值,变量创建的位置 但是当我在堆上声明一个变量时 int^ iHeap 然后据我所知,句柄已经创建,但变量没有实例化(不知道这里是否称之为实例化)或定义,我只能看到 iHeap = <Nicht definierter Wert> (which means <undefined value>) iHeap=(这意味着

当我声明一个变量时

int iStack;
然后声明它,但不定义它,因此它可以有如下任何值

iStack = -858993460
根据堆栈位置的值,变量创建的位置

但是当我在堆上声明一个变量时

int^ iHeap
然后据我所知,句柄已经创建,但变量没有实例化(不知道这里是否称之为实例化)或定义,我只能看到

iHeap = <Nicht definierter Wert>   (which means <undefined value>)
iHeap=(这意味着)
是否有任何方法可以检测是否定义了此值?对于int,我尤其不需要它,但对于

array<array<c_LocationRef^,2>^>^ arrTest2D_1D = gcnew array<array<c_LocationRef^,2>^>(2);
array^arrTest2D\u 1D=gcnewarray(2);
找出外部数组或内部数组的元素是实例化的(我确定这里是实例化;-))

arrTest2D\u 1D={Length=2}
[0]={Length=20}
[1] =   (=)

<代码> > P>我知道,CLR会自动初始化C++中的变量和引用。 在.NET中,公共语言运行库(CLR)明确地初始化所有 变量一经创建,就立即返回。值类型初始化为 0和引用类型初始化为null

要检测变量是否已初始化,应将hat变量的值与nullptr进行比较:

int^ iHeap;
if(iHeap == nullptr){
    Console::WriteLine(L"iHeap not initialised");
}
这对我的VS2010有效;它输出未初始化的iHeap

它也应该适用于您的特定问题(数组)

顺便说一下,值类型被初始化为零,因此您的第一个示例应该输出0(我已经测试了它,它确实输出0):

引用自
MSDN页,用于

编辑:这是微软的另一句话:

当您声明句柄时,它会自动初始化为null,因此它不会引用任何内容


引用“跟踪句柄”< /P>段落,我不知道CLI是否处理不同于C++的变量(或值类型),而要声明一个声明<代码> int istk;<代码>不会用零初始化变量,另请参见。由于CLI有类似于

value class
,我怀疑
int-iStack定义了CLI值类型,但我可能错了。但是谢谢你对nullptr的提示,这很有效!这里有另一个解释:是的,CLR(虚拟机)的行为与C++不同。特别是变量已初始化。无论如何,如果你的问题解决了,你可以关闭你的帖子:p
int^ iHeap;
if(iHeap == nullptr){
    Console::WriteLine(L"iHeap not initialised");
}
int iStack;
Console::WriteLine(L"iStrack = {0}", iStack); // outputs 0