struct MemBlock {
char mem[1024];
MemBlock operator*(const MemBlock &b) const {
return MemBlock();
}
} global;
void foo(int step = 0) {
if (step == 10000)
{
global = global * MemBlock();
}
else foo(step + 1);
}
int main() {
foo();
return 0;
}
程序收到信号 SIGSEGV,分段错误。0x08048510 in foo (step=4000) at t.cpp:12 12 void foo(int step = 0) {
尽管尚未调用 MemBlock() 实例,但它似乎消耗了大量的堆栈内存(检查 gdb 信息)。
而当我改用时global = global * global
,程序正常退出。
任何人都可以解释内部机制吗?