variables - 如何查明 c++/cli 堆变量是否具有 <未定义值>

标签 variables undefined c++-cli heap-memory

我已经有大约 4 年没有使用 C++ 了,一个月前又重新开始使用它,那也是我第一次听说 CLI 扩展的地方。我仍然需要习惯它,但是这个网站很有帮助!谢谢你!!无论如何,我找不到以下问题的答案:

当我声明一个变量时

int iStack;

然后它被声明但未定义,因此它可以具有任何值,例如

iStack = -858993460

取决于堆栈位置的值是什么,变量是在哪里创建的。

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

int^ iHeap

然后据我所知,句柄已创建,但变量未实例化(不知道您是否在此处将其称为实例化)或定义,我只能看到

iHeap = <Nicht definierter Wert>   (which means <undefined value>)

有什么方法可以检测这个值是否已定义?

我特别不需要它用于 int,但例如用于

array<array<c_LocationRef^,2>^>^ arrTest2D_1D = gcnew array<array<c_LocationRef^,2>^>(2);

找出外部或内部数组的元素是否被实例化(我确信这里它是一个实例化;-))

arrTest2D_1D = {Length=2}
   [0] = {Length=20}
   [1] = <Nicht definierter Wert>  (=<undefined value>)

最佳答案

据我所知,CLR 会自动初始化 C++ CLI 中的变量和引用。

In .NET, the Common Language Runtime (CLR) expressly initializes all variables as soon as they are created. Value types are initialized to 0 and reference types are initialized to null.

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

int^ iHeap;
if(iHeap == nullptr){
    Console::WriteLine(L"iHeap not initialised");
}

这适用于我的 VS2010 ;它输出iHeap notinitialized
它也应该适用于您的特定问题(数组)。

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

int iStack;
Console::WriteLine(L"iStrack = {0}", iStack); // outputs 0

引用自codeproject
MSDN 页面 nullptr

编辑:这是 Microsoft 这次的另一段引用:

When you declare a handle it is automatically initialized with null, so it will not refer to anything.

引自MSDN请参阅“跟踪句柄”段落

关于variables - 如何查明 c++/cli 堆变量是否具有 <未定义值>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17428079/

相关文章:

Java '.class' 预期错误

php - 使用 select 获取变量

c++ - 对类的私有(private)函数的 undefined reference

typescript - ionic 2 : Use cordova plugin with Typescript that has its own namespace

javascript - Node.js - 来自函数的值返回未定义

.net - C++ 与 C++/CLI : Const qualification of virtual function parameters

用于在 Windows 控制台中运行的游戏的 C++ 控件

javascript - 从具有不同 id 的 div 中删除指定的主元素

c - 从字符串到变量的整数表达式赋值 - C

c# - C++/CLI Dll 与 C# 连接问题