<struct at =“”null =“”>与&#34相同; Struct为空&#34;?

时间:2018-02-19 09:32:26

标签: c++ visual-studio visual-studio-2013

在Visual Studio中,BuildVision给出了一个错误,消息来自&lt;结构 Null&gt;

是否与&#34相同;结构是空的&#34;,还是它有所不同?

我问,因为我无法通过此邮件在网络上找到任何内容。我能找到的所有东西都指向&#34;结构是空的&#34;,但我找到的并没有帮助我!我想知道这是否是因为

编辑:

我添加了一个调试器窗口的屏幕,其中包含&lt;结构在Null&gt; -Stuff。我还有第二个问题:我想用if-else子句捕获这个异常。我该怎么说

if(value == <struct at NULL>)
    this()
else
    that()

这不起作用,虽然调试器说的值是。

enter image description here

在这个例子中,我尝试检查&#34;分发&#34;的组成部分。为null以确定Distribution对象的状态。这是原始代码:

if (Distribution.distBrowserName() == NULL || Distribution.getShape() == NULL)
        return false;
    else 
        return true;

2 个答案:

答案 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();
}

以下是关于无效引用的其他一些有趣的问题:

Is null reference possible?

Why don't I need to check if references are invalid/null?