【问题标题】:Why does removing 'cout' from my function change its result? [closed]为什么从我的函数中删除“cout”会改变它的结果? [关闭]
【发布时间】:2013-07-22 01:26:28
【问题描述】:

我是一名中级程序员,编写的程序对我来说可能非常复杂。这些程序的目的是构造某些二维数组,并且有几个不同的类对象以不那么简单的方式相互通信。为了调试,我添加了一行代码来输出我在程序中的位置(cout

所以我的问题是:可能会发生什么?或者更确切地说,如何包含 cout 语句“修复”(或对其他周围代码产生任何影响)? cout 语句似乎不会对缓冲区溢出产生影响,但如果有,请随时教育我。

【问题讨论】:

  • 您知道,这是 SSCCE 非常有用的时代之一。考虑到它可能是 UB 或微不足道的东西。
  • 您能否提供一些示例代码以便我们了解问题所在?
  • 你在做违法的事情。又名“未定义的行为”。这基本上意味着您无法真正了解代码中将要发生的事情。要获取更多信息,请发布您的代码。
  • 不,cout 不应该影响任何事情,除了对您的 STDOUT 的简单输出。请粘贴您的代码。
  • 只提供一个例子。未初始化的值,谁知道还有什么问题。

标签: c++ cout buffer-overflow


【解决方案1】:

您的程序使用定义为导致“未定义行为”的构造。更具体地说,程序可能会从执行堆栈中读取未初始化的内存,或者写入超出堆栈中存储内容的边界。调用函数(例如打印一些内容到 cout)会修改堆栈,并且如果您有这些类型的错误,可能会导致程序的行为有所不同。

【讨论】:

  • +1 表示“更具体”之后的所有内容。我遇到了同样的问题,这实际上有助于解决像我这样的新手看起来很疯狂的错误..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-04
  • 2021-05-10
  • 2021-10-22
  • 1970-01-01
  • 1970-01-01
  • 2022-06-16
  • 2023-03-11
相关资源
最近更新 更多