printf 에서의 SIGSEGV

sozu의 이미지

Program received signal SIGSEGV, Segmentation fault.
0xb7e363ca in _IO_file_xsputn () from /lib/tls/i686/cmov/libc.so.6

(gdb) up
#1 0xb7e0f681 in vfprintf () from /lib/tls/i686/cmov/libc.so.6
(gdb) up
#2 0xb7e17d43 in fprintf () from /lib/tls/i686/cmov/libc.so.6
(gdb) up

fprintf() 에서 SIGSEGV가 나는데 혹시 과도한 출력으로 인한 버퍼 오버플로우가 아닌지요?

현재 상황은 소켓 fd를 통해 얻은 출력 스트림으로 fprintf를 시도하였으며, 매우 빈번한 호출이 이루어집니다.

혹시 아시는분 있으시면 답변 부탁드립니다.

익명 사용자의 이미지

과도한 출력으로 인한것 같지는 않습니다.(과도한 출력이라면 이미, 커널에서 블록되었을것으로 간주됩니다. 블록킹소켓이라면)

저라면 2가지로 시도해보겠습니다.

* 만일 소켓 fd를 통해 얻은 출력스트림이, FILE *fsockfd라면...
setvbuf (fsockfd, NULL, _IONBF, 0);
를 수행해서 일단 버퍼링을 제거해 보시기 바랍니다.
* 다른 한가지는 fprintf()에서 레퍼런스하는 포인터를 의심해 보겠습니다.
* 또다른 가정은 혹시 fprintf()가 아닌 다른 곳에서 이미 Segment violation이 발생하지 않았나?라고 생각해봅니다.

주저리,,, 답이 없네요... 죄송....