gpt4 book ai didi

c++ - 为什么 Google 测试在一台机器上通过但在另一台机器上失败?

转载 作者:行者123 更新时间:2023-11-30 18:21:30 25 4
gpt4 key购买 nike

我们使用 GoogleTest 在 Eclipse 中测试我们的代码,但我有一个测试在一台机器上通过,但由于指针取消引用而在另一台机器上失败,我不确定为什么它的运行方式不同。该测试最近由 jr dev 添加到测试文件的末尾,以验证一个小更改。测试包含一个错误,但在他们的机器上以某种方式通过了:

TEST(TEST_SUITE, TEST_NAME)
{
uint8* response_data;
uint16 response_length = 1;
response_data[0] = 0x54;
//more code and actual validation
}

尝试写入空指针导致我的应用程序失败,但不知何故在他们的机器中定义了数据,因此能够通过。我在测试的第一行设置断点来查看,这就是我得到的结果:

我的机器 - 空指针: Failing Test at first line in test

他们的机器 - 定义的指针(和长度): Passing Test at first line in test

不知何故,尽管调用堆栈是相同的,并且测试以相同的顺序运行,但在一台机器中,变量以某种方式携带了一些其他值。

在具有相同代码库的两台不同机器上,这是否有不同的表现?测试中定义的变量是否没有范围限制?

最佳答案

正如 UnholySheep 在评论中提到的,responseData 尚未初始化,而你的同事正在使用它。

正如维基百科指出的,C++ 标准没有指定在这种情况下应该发生什么(这称为 undefined behaviour )。这意味着它可以与他们一起工作,但不能与你一起工作。因此,如果您使用的编译器与它们不同(或者即使您设置了不同的编译标志,例如优化级别,或者是否使用调试),您可能不会得到相同的结果。

为了更深入地解释您的具体情况,对于他们来说,指针似乎没有设置为任何东西(responseData有一个垃圾值),而对于您来说,responseData被设置为 nullptr。

关于c++ - 为什么 Google 测试在一台机器上通过但在另一台机器上失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42633220/

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