在Visual Studio中,BuildVision给出了一个错误,消息来自<结构在 Null>
是否与&#34相同;结构是空的",还是它有所不同?
我问,因为我无法通过此邮件在网络上找到任何内容。我能找到的所有东西都指向"结构是空的",但我找到的并没有帮助我!我想知道这是否是因为 ?
编辑:
我添加了一个调试器窗口的屏幕,其中包含<结构在Null> -Stuff。我还有第二个问题:我想用if-else子句捕获这个异常。我该怎么说
if(value == <struct at NULL>)
this()
else
that()
这不起作用,虽然调试器说的值是。
在这个例子中,我尝试检查&#34;分发&#34;的组成部分。为null以确定Distribution对象的状态。这是原始代码:
if (Distribution.distBrowserName() == NULL || Distribution.getShape() == NULL)
return false;
else
return true;
答案 0 :(得分:3)
(已经晚了三个月,但这是我的最佳搜索结果。希望我可以帮助别人。)
回答第一个问题:是的,<struct at NULL>
表示对象(结构或类)的引用为空。此消息可以带有悬空参考,就像您的情况一样。它也可以带有悬空/空指针。
因此,对于您的第二个问题,它是您示例中导致问题的Distribution
对象本身的引用,因此您可能正在寻找悬空参考某处。
人们经常忽视的MSVS中一个有用的功能是数据断点。如果您不熟悉它们,可以read about them here。例如,在这种情况下,它可以帮助您确定您的Distribution
变量是否在您不期望的地方受到影响。
答案 1 :(得分:2)
我最近也遇到了这个问题。在我的情况下,这是由于引用已通过取消引用空指针而初始化而引起的。基本上是这样的:
Foo * fooPtr = nullptr;
// ...
Foo & fooRef = *fooPtr;
// ...
fooRef.Bar() // read access violation
即使在第三行引发异常,问题也实际上出在第二行,因为取消引用空指针是未定义的行为。在这里,它创建对无效对象的引用,Visual Studio调试器将其表示为<Struct at NULL>
。尝试访问此无效对象的成员会导致读取访问冲突。
如果您仍要验证引用是否为<Struct at NULL>
,可以通过将其地址与null进行比较来实现:
if (&fooRef != nullptr)
{
fooRef.Bar();
}
以下是关于无效引用的其他一些有趣的问题: