понимание трассировки стека для ошибки сегментации

Я выполняю snprintf и получаю ошибку сегмента.

когда я загружал основной файл на gdb, например это: gdb my_executable core ; и выполнил bt , чтобы получить трассировку, я получил следующее:

Program terminated with signal 11, Segmentation fault.
#0  0x88207fc2 in memcpy () from /usr/lib/libc.so.6
(gdb) bt
#0  0x88207fc2 in memcpy () from /usr/lib/libc.so.6
#1  0x88205eb6 in __sfvwrite () from /usr/lib/libc.so.6
#2  0x881fbc95 in strchr () from /usr/lib/libc.so.6
#3  0xbfbe6c14 in ?? ()
#4  0xbfbe69d8 in ?? ()
#5  0x881ed91e in localeconv () from /usr/lib/libc.so.6
#6  0x881fec05 in __vfprintf () from /usr/lib/libc.so.6
#7  0x881f7d80 in snprintf () from /usr/lib/libc.so.6  
#8  0x08052b64 in my_function (files=0xbfbed710, filename=<value optimized out>) at myfile.c:1102
#9  0x08053bfb in main (argc=4, argv=0xbfbedd90) at myfile.c:225

Я видел такой стек много раз в случае ошибки сегмента, но никогда не понимал правильно.

Просто взглянув на вызовы в трассировке, мы можем сказать что не так?

ПРИМЕЧАНИЕ. Не запрашивайте дополнительный код. Мой мотив - просто понять, что означает такая трассировка стека - независимо от кода. Я вижу, что наверху происходит сбой memcpy. Я хочу понять, когда это может произойти в данной ситуации.

5
задан hari 17 July 2011 в 19:14
поделиться