This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] 编译器/MSP430F5659:类的私有成员引用具有空地址

Guru**** 2538950 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/684122/compiler-msp430f5659-private-member-reference-of-a-class-has-a-null-address

器件型号:MSP430F5659

工具/软件:TI C/C++编译器

我有一个类、其中包含一个私有成员、它是对整数的引用。 当我尝试在类构造函数中初始化此引用时,我发现成员的地址为0x000000。 有人以前见过这种东西吗?  编译器会安静地允许此操作、并且(TI v17.9.0.STS)不会发出警告或错误。  下面是一个屏幕截图、其中描述了一个生成此问题的简单示例。 注意:向输入变量或类成员添加或删除 const 限定符不会更改结果。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    这可能是调试器显示屏的问题。  当您在没有停止的情况下运行代码时、它是否按预期工作?

    谢谢、此致、

    乔治

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的乔治:

    即使我让程序运行、它也无法正常运行。

    谢谢、

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的乔治:

    我一直在尝试不同的方案、并且能够制作一个程序、在该程序中、基准似乎可以工作、但是用于基准的调试器数据为空。 这是一个与我最初提出的方案不同的问题,但我希望这一信息仍然有用。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的乔治:

    您是否能够对此进行研究?

    谢谢、
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    返回到您的第一个帖子中的代码... 这不是合法的 C++。 很抱歉、我没有提前注意到。

    这是类引用 为了使事情更加清晰、我更改了一些名称。

    第6行是引用的构造函数 它会创建对 arg 的引用。 当该构造函数完成执行时,arg 将超出范围。 现在、您可以引用不存在的内容。 这不是合法的 C++。

    解决此问题的方法有多种。 由于我怀疑您显示的是实际代码的削减、因此我不确定讨论如何修复此精确代码是否合理。 关键点是:创建引用时、引用(引用的变量或对象)必须在引用处于范围内的任何位置都保留在范围内。

    谢谢、此致、

    乔治

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    哇、我也不敢相信我也没有看到这个。 在我的示例中,我需要将引用/指针传递给构造函数,而不是值。 不幸的是、编译器和用于 eclipse 的 cpcheck 扩展也没有抱怨。