我有一个用C ++编写的程序,用gcc 4.8.1编译,在CentOS 5上运行。在某些情况下,它会遇到无限递归并且通常会导致seg错误。我是否可以指望每次都发生这种情况,或者执行行为可能会有什么不同,包括可怕的情况,如损坏的数据和应用程序继续看似正常运行?
我知道堆栈溢出的结果一般是未定义的,我只是想知道如果操作系统是CentOS 5,结果是否有点确定。
答案 0 :(得分:4)
鉴于CentOS是一个Linux / GNU操作系统,你可以指望它生成一个SIGSEGV ......当你去堆栈末端访问页面时,操作系统会给你发出信号。
(请注意,这与缓冲区溢出非常不同,这是堆栈可能遇到问题的另一种方式:在这种情况下,它通常是堆栈上的索引超出其结束地址的数组 - 太远了它可能生成一个SIGSEGV,但在其他地址,它允许访问堆栈上的其他数据,如函数参数,保存的寄存器值和返回地址。这个问题有更微妙的表现形式,如数据损坏和安全问题。)