2011-05-13 97 views
1
#define MAX_LENGTH_STRING 4096 
void BugCode() 
{ 
    char szLine[MAX_LENGTH_STRING] = {0}; 
    char szSelection[MAX_LENGTH_STRING] = {0}; 
    va_list my_args; 

    szSelection[0]= 0xe7 ; 
    szSelection[1]= 0xac ; 
    szSelection[2]= 0xac ; 
    szSelection[3]= 0xe4 ; 
    szSelection[4]= 0xb8 ; 
    szSelection[5]= 0x80 ; 
    szSelection[6]= 0xe5 ; 
    szSelection[7]= 0x8d ; 
    szSelection[8]= 0x95 ; 
    szSelection[9]= 0x00 ; 


    va_start(my_args, szSelection); 

#ifdef WIN32 
    _vsnprintf(szLine, MAX_LENGTH_STRING-1, szSelection, my_args); 
#else 
    vsnprintf(szLine, MAX_LENGTH_STRING - 1, szSelection, my_args); 
#endif 
} 

的BugCode()將崩潰在_vsnprintf() 但是,如果我複製&這些代碼粘貼到一個簡單的項目,它工作得很好......爲什麼這些代碼會在某個時候崩潰?

回答

2

您沒有使用正確va_startva_start(和va_list)只能用於variadic function arguments。將它們用於任何其他目的是未定義的行爲。

相關問題