0

サブ関数内で 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
}

私の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をそのようにクラッシュさせることができますか?

4

1 に答える 1