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 в foo (шаг = 4000) при t.cpp: 12 12 void foo (int step = 0) {
Кажется, что экземпляр MemBlock() стоит много памяти стека, хотя он еще не был вызван (проверьте информацию gdb).
И когда я использую global = global * global
вместо этого, программа выйдет нормально.
Кто-нибудь может объяснить внутренний механизм?