2013-04-01 53 views
-1

我的應用程序有時會遇到訪問衝突。 我通過windbg運行應用程序,並停止在以下功能。 也試過_vscprintf而不是vsnprintf,結果是一樣的。 我是關於windbg的新手。 任何幫助將不勝感激。通過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. 
+0

發佈更多用於調用函數的代碼。 –

回答

0

你試圖打印成空指針的結果:len = vsnprintf(0, 0, format, *ap);;當然,它會崩潰。發送輸出緩衝區的有效地址作爲第一個參數,有效長度作爲第二個參數。

+0

我也試過_vscprintf而不是vsnprintf(),結果是一樣的。 – route

相關問題