Сейчас словил сегфолт при выводе строки длиной 636180 байт.
Сегфолтная команда:
fprintf(stderr, "%s", message);
где message имеет тип «const char *message» и размер данных в 636180 байт.
В стеке вызовов видно, что после функции fprintf() были вызваны:
strlen ()
__GI__IO_fputs (str=0xb2379018 <Address 0xb2379018 out of bounds>, fp=0xb6ecc960 <_IO_2_1_stderr_>)
- т. е. сначала fputs(), последней strlen().
Сегфолт в дебрях strlen(). (Мне не нравится и строка с fputs(), ибо в ней «Address 0xb2379018 out of bounds»).
Таких проблем на коротких строках (чуть более 1000 знаков) не возникает.
Вопрос: существуют какие-то ограничения в компиляторах на работу с сишными строками? Я то думал, что размер строки ограничивается максимальным числом unsigned int. А тут вона как - 630 КБ прожевать не может.
Или, к примеру, существует какое-то ограничение на работу с потоком ошибок, только я о нем не знаю?
Если это важно: gcc (Debian 4.7.1-7) 4.7.1