c++ - 从<iostream.h> 更改为<iostream> 会导致缓冲区溢出吗?

标签 c++ gcc compiler-construction buffer-overflow

我需要构建一些我在办公室电脑上得到的旧代码,它有 gcc 4.4.5安装。我编辑了代码(删除 .h 或添加类似 <cstring> 的内容)以使它们保持最新,以便它们可以由 gcc 4.4.5 编译.但是,在看似成功编译之后,二进制文件每次运行时都会发出缓冲区溢出。但是代码在我家里的电脑上运行没有错误(gcc 4.1.2)。那么我所做的更改是否可能导致此错误?我不确定,因为我不是真正的程序员。

最佳答案

更有可能的是原始代码在某些方面存在错误(未定义行为、缓冲区溢出等),但旧编译器创建(或包含旧库)的代码更能容忍这些问题(一)

恐怕您可能不得不去解决(或找人解决)问题的根本原因。我的问题是:“如果您不认为自己是程序员,为什么要编辑代码并重新构建它?”。

我妈妈也不是编码员,但她不会四处修补 Linux 内核 :-)


(a) 有时未定义的行为实际上有效!这实际上是它最烦人的方面。更好的是它会一直失败,这样我们就可以解决更多问题,然后再将它们释放给我们可怜的客户。但是,即使它有效,也不是一个好主意。

关于c++ - 从<iostream.h> 更改为<iostream> 会导致缓冲区溢出吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7803147/

相关文章:

compiler-construction - 使宏和函数更无缝地集成

c - 运行 lex 和 yacc 时出现语法错误

haskell - Hoopl 中重写函数内的单子(monad)效应示例?

c++ - QTreeWidget 中是否有默认图标?

c - 打开文件以从 Solaris 中用 C 编写的共享库进行写入

linux - glibc时间函数实现

c - 需要帮助理解 GCC 汇编代码

c++ - 析构函数在 lambda 捕获说明符内声明的类实例上运行两次

c++ - 链接 V8 时 undefined reference

c++ - 为什么C++标准要为std::bitset::reference指定一个析构函数?