c++ - <Struct at NULL> 与 "Struct is null"相同吗?

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

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

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

我问这个问题是因为我在网上找不到任何与此消息相关的内容。我能找到的所有内容都指向“Struct is Null”,但我找到的所有内容都没有帮助我!我想知道这是否是因为 at

编辑:

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

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

这是行不通的,尽管调试器说该值为 .

enter image description here

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

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

最佳答案

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

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?

关于c++ - <Struct at NULL> 与 "Struct is null"相同吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48863057/

相关文章:

c++ - 通过类存储和更新 vector 中的当前最小值

c++ - Qt DrawLine - 在绘制时动态更改线条颜色,而不拆分线条

c++ - 重构 protected 基类依赖以进行测试

c# - WPF Datagrid 不显示文本

visual-studio-2013 - Visual Studio 和 gtest 的代码覆盖率

c++在构造函数中传递数组而不在其他地方定义它们

c# - 自动封装字段重构, 'Use field' 和 'Use Property' 之间的区别?

visual-studio - 更改 Eclipse 快捷方式以匹配 Visual Studio

visual-studio-2013 - 每次使用 Toad SQL Tracker IIS 附加时,Visual Studio 2013 IIS Express 都会崩溃

visual-studio-2013 - 控制台上的 Visual Studio 2013/15 Nuget 错误 - "The module to process ' nuget.psm 1', listed in field ' ModuleToProcess' of module manifest..."