하위 함수 내에서 printf를 호출하면 액세스 위반이 발생합니다.subfunction에서 printf 액세스 위반 - Ansi C90
프로그램 크기가 매우 큽니다. 하지만 난 subfunction 전화 만 만들어진 지점으로 문제를 격리 할 수있었습니다.
printf ("test")와 같은 리터럴 상수를 사용하여 printf를 호출하여 시스템을 중단시킬 수 있습니다. 일부 다른 사람들은 printf에 이상한 객체를 제공하여 위반에 액세스했습니다. 이는 여기에 해당하지 않습니다. 내 stachtrace에서
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와 충돌 할 수있는 시스템 설정은 무엇입니까?
것은 당신은 아마 다른 곳에서 스택 손상했다. 이 코드는 괜찮은 것 같습니다. 일부 동적 코드 분석 도구를 사용하여 액세스 위반을 추적 해보십시오. 또한 VS에서 "디버그"를 사용하여 코드를 실행 해보십시오. –