gpt4 book ai didi

c++ - UB 能否导致多个单线程应用程序运行产生不同的输出?

转载 作者:太空宇宙 更新时间:2023-11-03 10:21:28 25 4
gpt4 key购买 nike

是否有可能满足以下条件的代码在每次运行相同输入时产生不同的输出?

  • 虽然代码是单线程的它确实链接到一个线程安全的运行时库。
  • 没有明确调用 rand() 或 time() 或它们的 friend 。
  • 有一些堆内存分配。
  • 可能有一些(错误的)代码会导致未定义的行为。

最佳答案

“未定义的行为”意味着任何事情都可能发生。这还包括每次运行程序时可能会发生不同的事情。

例如,如果您使用未初始化的内存,它可能会因程序运行而不同,程序运行的内存中究竟包含什么。

一个简单的例子:

int main() {
char s[1024];
s[1023] = '\0';
std::cout << s << std::endl;
}

这通常会在每次运行时打印不同的字符串。它不使用任何堆分配,我什至不认为它是任何未定义的行为,所以它可能不是您问题的预期解决方案。

另一个例子是 new 可以在每次程序运行时返回不同的地址(这里也没有 UB):

int main(void) {
std::cout << new int << std::endl;
}

因此,即使没有未定义的行为,也存在“随机性”的来源,因此当然 未定义的行为也会在每次程序运行时发生不同的事情。

关于c++ - UB 能否导致多个单线程应用程序运行产生不同的输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3541818/

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