Вызов printf внутри подфункции приводит к нарушению доступа.Нарушение прав доступа printf в подфункции - Ansi C90
Программа довольно огромная по размеру. но я смог изолировать проблему до такой степени, что был сделан только вызов подфункции.
Я могу сбой системы, вызывая 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
}
С моей stachtrace:
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?
Вы, вероятно, повреждение стека где-то в другом месте. Мне кажется, этот код мне подходит. Попробуйте использовать инструмент анализа динамического кода для отслеживания нарушений доступа. Также попробуйте запустить код, используя «Debug» в VS –