-1

アプリケーションでアクセス違反が発生することがあります。アプリケーションをwindbgで実行したところ、次の関数で停止しました。vsnprintf の代わりに _vscprintf も試しましたが、結果は同じでした。私はwindbgの初心者です。どんな助けでも大歓迎です。

int tsk_sprintf_2(char** str, const char* format, va_list* ap)
{
    int len = 0;
    va_list ap2;
    ap2 = *ap; 
   len = vsnprintf(0, 0, format, *ap); /*-> access violation in this point! */
   *str = (char*)calloc(1, len+1);
   vsnprintf(*str, len, format, ap2);
   va_end(ap2);    
   return len;
}

==> 以下は、windbg の結果です

MANAGED_STACK: !dumpstack -EE

OS Thread Id: 0x5b8 (22)

Current frame: 
ChildEBP RetAddr  Caller, Callee
PRIMARY_PROBLEM_CLASS:  WRONG_SYMBOLS
BUGCHECK_STR:  APPLICATION_FAULT_WRONG_SYMBOLS
LAST_CONTROL_TRANSFER:  from 1026d3d8 to 102e14cf

STACK_TEXT:  
    WARNING: Stack unwind information not available. Following frames may be wrong.

    1d3cde7c 1026d3d8 1d3cdea8 0898eeeb 00000000 MSVCR100D!vcwprintf_s_l+0x52ef
    1d3cded0 1026d46c 00000000 00000000 0898ee88 MSVCR100D!vsnprintf_l+0x158
    1d3cdeec 0834d927 00000000 00000000 0898ee88 MSVCR100D!vsnprintf+0x1c
    1d3cdfe8 1002891e 1d3ce0d0 0898ee88 1d3ce1e4 tinySAK!tsk_sprintf_2+0x57
    1d3ce0f0 10028b77 09a16fe8 0898ee88 00000000 tinyWRAP!debug_xxx_cb+0x6e
    1d3ce1ec 088b697b 09a16fe8 0898ee88 00000444 tinyWRAP!DDebugCallback::debug_info_cb+0x37
    1d3cffb4 7c80b713 1cd10f90 1d2cfb44 7c947d9a tinyNET!tnet_transport_mainthread+0x1adb
    1d3cffec 00000000 088a2aff 1cd10f90 00000000 KERNEL32!GetModuleFileNameA+0x1b4

SYMBOL_STACK_INDEX:  0
SYMBOL_NAME:  msvcr100d!vcwprintf_s_l+52ef
FOLLOWUP_NAME:  MachineOwner

MODULE_NAME: MSVCR100D
IMAGE_NAME:  MSVCR100D.dll
STACK_COMMAND:  ~22s ; kb
BUCKET_ID:  WRONG_SYMBOLS
FAILURE_BUCKET_ID:  WRONG_SYMBOLS_c0000005_MSVCR100D.dll!vcwprintf_s_l
WATSON_STAGEONE_URL:  
Followup: MachineOwner
---------


route.
4

1 に答える 1

0

NULL ポインターに出力しようとしています: len = vsnprintf(0, 0, format, *ap);; もちろん、クラッシュします。最初のパラメーターとして出力バッファーの有効なアドレスを送信し、2 番目のパラメーターとして有効な長さを送信します。

于 2013-04-01T12:42:49.243 に答える