Переполнение стека является ошибкой сегментации. Так как вы нарушили данные границы памяти, которые вы изначально выделяли. Стек конечного размера, и вы превысили его. Вы можете прочитать больше об этом в Википедии
Кроме того, одна вещь, которую я делал для проектов в прошлом, - это запись моего собственного обработчика сигналов в segfault (посмотрите на man-страницу signal (2)). Я обычно ловил сигнал и выписывал «Фатальная ошибка произошла» на консоль. Я сделал еще кое-что с флагами контрольных точек и отладкой.
Для отладки ошибок сегментов вы можете запустить программу в GDB. Например, следующая программа на C будет иметь ошибку:
# segfault.c
#включают
#include
int main()
{
printf("Starting\n");
void *foo=malloc(1000);
memcpy(foo, 0, 100); //this line will segfault
exit(0);
}
Если я скомпилирую это так:
gcc -g -o segfault segfault.c
и затем запустите его так:
$ gdb ./segfault
GNU gdb 6.7.1
Copyright (C) 2007 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "i686-pc-linux-gnu"...
Using host libthread_db library "/lib/libthread_db.so.1".
(gdb) run
Starting program: /tmp/segfault
Starting
Program received signal SIGSEGV, Segmentation fault.
0x4ea43cbc in memcpy () from /lib/libc.so.6
(gdb) bt
#0 0x4ea43cbc in memcpy () from /lib/libc.so.6
#1 0x080484cb in main () at segfault.c:8
(gdb)
Я узнаю из GDB, что в строке 8 произошла ошибка сегментации. Конечно, есть более сложные способы обработки переполнения стека и других ошибок памяти, но этого будет достаточно.