<Struct at NULL> 和 "Struct is null" 一样吗?
Is <Struct at NULL> the same as "Struct is null"?
在 Visual Studio 中,BuildVision 给我一个错误,消息是 < Struct at Null>
和"Struct is Null"是一样的还是不一样的?
我之所以提问,是因为我在网上找不到任何与此消息相关的内容。我能找到的所有内容都指向 "Struct is Null",但我找到的所有内容都没有帮助我!我想知道这是不是因为 at?
编辑:
我用 -Stuff 添加了调试器 window 的屏幕截图。我还有第二个问题:我想用 if-else 子句捕获这个异常。我怎么说
if(value == <struct at NULL>)
this()
else
that()
这是行不通的,尽管调试器说该值是 .
在此示例中,我尝试检查 "distribution" 的组件是否为空以确定 Distribution 对象的状态。这是原始代码:
if (Distribution.distBrowserName() == NULL || Distribution.getShape() == NULL)
return false;
else
return true;
(晚了三个月,但这是我的热门搜索结果。希望我能帮助别人。)
回答您的第一个问题:是的,<struct at NULL>
表示对对象(结构或class)的引用为空。这条消息可能会出现一个悬垂的引用,就像你的情况一样。它也可以与 dangling/null 指针一起出现。
因此,对于您的第二个问题,是您示例中对 Distribution
对象本身的引用导致了问题,因此您可能正在某处寻找悬空引用。
人们经常忽视的 MSVS 中一个有用的功能是数据断点。如果您不熟悉它们,可以 read about them here。例如,在这种情况下,它可以帮助您追踪 Distribution
变量是否在您未预料到的某个地方受到影响。
我最近也遇到了这个问题。在我的例子中,它是由通过取消引用空指针初始化的引用引起的。基本上是这样的:
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?
在 Visual Studio 中,BuildVision 给我一个错误,消息是 < Struct at Null>
和"Struct is Null"是一样的还是不一样的?
我之所以提问,是因为我在网上找不到任何与此消息相关的内容。我能找到的所有内容都指向 "Struct is Null",但我找到的所有内容都没有帮助我!我想知道这是不是因为 at?
编辑:
我用
if(value == <struct at NULL>)
this()
else
that()
这是行不通的,尽管调试器说该值是 .
在此示例中,我尝试检查 "distribution" 的组件是否为空以确定 Distribution 对象的状态。这是原始代码:
if (Distribution.distBrowserName() == NULL || Distribution.getShape() == NULL)
return false;
else
return true;
(晚了三个月,但这是我的热门搜索结果。希望我能帮助别人。)
回答您的第一个问题:是的,<struct at NULL>
表示对对象(结构或class)的引用为空。这条消息可能会出现一个悬垂的引用,就像你的情况一样。它也可以与 dangling/null 指针一起出现。
因此,对于您的第二个问题,是您示例中对 Distribution
对象本身的引用导致了问题,因此您可能正在某处寻找悬空引用。
人们经常忽视的 MSVS 中一个有用的功能是数据断点。如果您不熟悉它们,可以 read about them here。例如,在这种情况下,它可以帮助您追踪 Distribution
变量是否在您未预料到的某个地方受到影响。
我最近也遇到了这个问题。在我的例子中,它是由通过取消引用空指针初始化的引用引起的。基本上是这样的:
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?