Вызов printf внутри подфункции приводит к нарушению прав доступа.
Программа довольно большая по размеру. но я смог изолировать проблему до такой степени, что выполняется только вызов подфункции.
я могу вывести систему из строя, вызвав printf с такой буквальной константой: printf("test"). Некоторые другие люди также имели нарушения доступа, передавая странный объект в printf - здесь это не так.
Вот некоторый псевдокод:
subfunction()
{
printf("all works great"); //Access Violation
//some other calls here
}
void main()
{
otherfunctions(); //
printf("all works great");
subfunction();
//some more calls here
}
Из моего стахтрейса:
msvcr100d.dll!_chkstk()
msvcr100d.dll!_write(int fh, const void * buf, unsigned int cnt)
msvcr100d.dll!_flush(_iobuf * str)
msvcr100d.dll!_ftbuf(int flag, _iobuf * str)
msvcr100d.dll!printf(const char * format, ...)
Код находится в коде C90 и компилируется с VS2010. Его следует рассматривать как C90. Это произошло после рефакторинга, когда все _(v)snprintf были заменены на их аналоги _(v)snprintf_s. Не уверен, что это повлияло.
Я думаю, что буфер очищается до того, как в него что-то записывается.
Как я могу исследовать это дальше? Какие системные настройки могут коснуться моего другого кода, чтобы вызвать такой сбой printf?