-1

我的应用程序有时会出现访问冲突。我通过windbg运行应用程序,它在以下函数中停止。还尝试了_vscprintf而不是vsnprintf,结果是一样的。我是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);:当然,它会崩溃。发送输出缓冲区的有效地址作为第一个参数,有效长度作为第二个参数。

于 2013-04-01T12:42:49.243 回答