私は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」が失敗していることがわかります。このような状況でそれがいつ起こり得るのかを理解したいと思います。