【问题标题】:Is <Struct at NULL> the same as "Struct is null"?<Struct at NULL> 是否与“Struct is null”相同?
【发布时间】:2018-07-29 12:06:39
【问题描述】:

在 Visual Studio 中,BuildVision 给了我一个错误,其中的消息是 at Null>

和“Struct is Null”是一样的,还是有什么不同?

我之所以这么问,是因为我在网络上找不到包含此消息的任何内容。我能找到的只是指向“Struct is Null”,但我发现的一切都没有帮助我!我想知道这是不是因为 at

编辑:

我使用 -Stuff 添加了调试器窗口的屏幕。我还有第二个问题:我想用 if-else 子句捕捉这个异常。怎么说呢

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

这不起作用,尽管调试器说该值为 .

在此示例中,我尝试检查“分发”的组件是否为空,以确定分发对象的状态。这是原始代码:

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

【问题讨论】:

  • 错误码是什么?
  • 抱歉,但我不相信“”是完整的错误消息
  • 发布一些代码? at 表明你在玩弄指针。也许是指向指针的指针
  • 我试图以strategy-&gt;plot() 的形式调用一些东西,而策略是一个自定义类指针。出现的错误消息在“访问违规...”窗口中。 BuildVision 中的错误只是
  • 我认为您需要编辑问题以获得最小的、可验证的示例

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


【解决方案1】:

我最近也遇到了这个问题。在我的情况下,它是由通过取消引用空指针初始化的引用引起的。基本上是这样的:

Foo * fooPtr = nullptr;
// ...
Foo & fooRef = *fooPtr;
// ...
fooRef.Bar() // read access violation

即使在第三行抛出异常,问题实际上出在第二行,因为取消引用空指针是未定义的行为。在这里,它创建了对 Visual Studio 调试器表示为 &lt;Struct at NULL&gt; 的无效对象的引用。尝试访问此无效对象的成员会导致读取访问冲突。

如果你还想验证一个引用是否为&lt;Struct at NULL&gt;,你可以通过比较它的地址和null来实现:

if (&fooRef != nullptr)
{
    fooRef.Bar();
}

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

Is null reference possible?

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

【讨论】:

    【解决方案2】:

    (晚了三个月,但这是我的热门搜索结果。希望我可以帮助某人。)

    回答您的第一个问题:是的,&lt;struct at NULL&gt; 表示对对象(结构或类)的引用为空。此消息可能与悬空引用一起出现,就像您的情况一样。它也可以与悬空/空指针一起出现。

    因此,对于您的第二个问题,是您的示例中对 Distribution 对象本身的引用导致了问题,因此您可能正在某处寻找悬空引用。

    人们经常忽略的 MSVS 中一个有用的特性是数据断点。如果您对它们不熟悉,可以read about them here。例如,在这种情况下,它可以帮助您追踪您的 Distribution 变量是否在您未预料到的某个地方受到影响。

    【讨论】:

    • 天哪,我很抱歉,我只是忘了点赞并接受这个答案^^。希望你仍然活跃,这条消息会到达你=)
    • @monamona 不用担心! :)
    猜你喜欢
    • 2020-11-17
    • 1970-01-01
    • 2011-05-15
    • 2017-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多