gpt4 book ai didi

c++ - C++ 生成器 2010 中出现奇怪的 "random"内部编译器错误

转载 作者:太空狗 更新时间:2023-10-29 23:19:05 24 4
gpt4 key购买 nike

我有一些代码将一堆 TNotifyEvents 放在一个 vector 中。

std::vector<TNotifyEvent> m_availableCallbacks;

这是应用程序的主要形式的成员。在表单构造函数中,它充满了事件。

m_availableCallbacks.push_back(ReadoutLastValue);
m_availableCallbacks.push_back(ReadoutCurrentDay);
m_availableCallbacks.push_back(ReadoutLastDay);
m_availableCallbacks.push_back(Readout7Days);
m_availableCallbacks.push_back(Readout1Month);
m_availableCallbacks.push_back(ReadoutChooseTimeSpan);
m_availableCallbacks.push_back(ReadoutAllData);

然后迭代此 vector 并用于创建弹出菜单并将通知事件分配给该弹出菜单中的元素。

本地编译没有问题。当我在构建服务器(运行 TeamCity 6.5)上编译它时,我在与第二个 push_back 调用相等的行上收到一个内部编译器错误。

我尝试通过编辑 cbproj 文件在构建代理上本地禁用智能缓存预编译 header 。这产生了一个成功的构建。因此,我从所有 cbproj 文件中删除了使用智能缓存预编译 header 的指令并提交了更改。我告诉 TeamCity 做一个Clean Checkout,我又一次在同一个地方遇到了同样的内部编译器错误。奇怪的是,在失败的编译成功后又重新编译,所以感觉非常随机。

这是怎么回事?我习惯于在其他 C++ 编译器中传递函数指针(由我自己创建)就好了。 TNotifyEvents 的内部处理是否损坏,或者编译器是否不稳定且容易损坏?

查看采用 TNotifyEvents 的其他代码,它们不适用于引用或指针,所以我没有尝试这样做。由于代码(在编译时)按预期工作,这似乎不是问题所在。

更新:

我可以补充一点,TeamCity 的日志表明 FrontEnd.cpp 文件(包含此代码)在我重新运行编译时被跳过并且它成功。

[10:04:37]: [MakeObjs] CallTarget
[10:04:37]: [CallTarget] _CppDepCheck
[10:04:44]: [_CppDepCheck] MessageMap
[10:04:44]: [MessageMap] Skipping: ..., FrontEnd.cpp, ...

要使它正常工作,编译必须在发生内部编译器错误时成功。否则它怎么能跳过编译文件并仍然神奇地出现并以编译形式使用呢? :)

更新2

经过调查,我可以确认只有在 release 模式下编译时才会发生这种情况。在发行版中,它甚至发生在我的本地机器上的 IDE 中。我试过摆弄像

这样的设置
  • 禁用所有优化
  • 尽可能生成最快的代码
  • 外部类型文件
  • 等等

在每次尝试之间清理构建。但 ICE 不会消失。然而,我确实设法让它提示另一个文件中的另一个地方。将设置恢复为之前的设置不会使错误返回到 FrontEnd.cpp 文件。这个编译器感觉有点不稳定:)

事实上,我开始在代码中使用 ICE,并且必须重新启动 IDE 才能编译任何东西。

最佳答案

这似乎与 std::vector 有关。不确定是它自己损坏了还是 bcc 处理它的方式有问题。但是切换到 C 风格的数组作为测试反而让 ICE 消失了,它现在在调试和 Release模式下都能正常工作。

TNotifyEvent m_availableCallbacks[7];

我想避免这种情况,因为向 vector 添加新事件几乎只涉及一行代码。现在还有更多要记住要更改的内容。但是,最好让应用程序编译。

如果我错误地认为这是 BCC 中的错误,请纠正我,以便我可以尽快恢复使用 vector :)...否则我希望 Embarcadero 尽快修复此问题。

关于c++ - C++ 生成器 2010 中出现奇怪的 "random"内部编译器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10812412/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com