我问这个问题不是因为我不知道为什么发生堆栈粉碎。我以前见过this question。
我正在开发OnlineJudge检查器,因此我必须处理此问题。
以下面的shell代码为例:
{ ./a.out; } 2>err
可以像这样处理其他常见的运行时错误,例如分段错误(非法指针)和浮点异常(1 / 0,1%0)。
但是,请考虑以下C代码:
int main() {
int a[2];
a[0] = 1;
a[1] = 2;
a[2] = 3;
return 0;
}
运行上面的Shell代码仍将在控制台上输出**** stack smashing detected ***: ./a.out terminated*
。如果我想重定向此错误输出该怎么办?