c++: gcc 4.2.1给出的程序会出现分段错误,而不是在linux上

C++: gcc 4.2.1 gives program which segfaults, not on linux

本文关键字:错误 分段 linux gcc 程序 c++      更新时间:2023-10-16

下面这个简单的程序在我的mac (Lion)运行gcc 4.2.1时出现了分段错误:

#include <iostream>
using namespace std;
struct A{
  friend std::ostream& operator << (std::ostream& os, const A& a) {
    os << 3 << endl;
  }
};
template <typename T>
T f() { return T();}
int f() { return 2;}

int main() {
  cout << f() << endl;
  A a= f<A>();
  cout << a << endl;
}

当我运行程序时,我得到:

 ./a.out
2
3
Segmentation fault: 11

当我执行堆栈跟踪时,我得到:

(gdb) run
Starting program: a.out 
unable to read unknown load command 0x24
unable to read unknown load command 0x26
2
3
Program received signal SIGSEGV, Segmentation fault.
0x00007fff8b84fa49 in ?? ()
(gdb) bt
#0  0x00007fff8b84fa49 in ?? ()
#1  0x00007fff665c1ae8 in ?? ()
#2  0x0000000000000000 in ?? ()

回溯没有有用的信息(有人知道为什么吗?)这是

让我们看得更清楚些

(cout << a) << endl;

你在你的operator<<中忘记了一个return