2015-10-02 516 views
0

當運行此代碼時,我的代碼錯誤:棧變量window_text_hex損壞。我看不到錯誤?堆棧周圍變量損壞

DWORD WINAPI fill_matrix(LPVOID lpParameter) 
{ 
    char window_text_hex[5]; 
    for (int i = 0; i < 8; i++){ 
     int data_j = 0; 
     for (int j = 0; j <8; j++) 
     { 

      char window_text[5] = { mySerial.data[i][data_j], mySerial.data[i][data_j + 1], mySerial.data[i][data_j + 2], mySerial.data[i][data_j + 3], '\0' }; 
      for (int i = 0; i<4; i++) 
      { 
       sprintf(&window_text_hex[i], "%02X", window_text[i]); 
      } 
      SetWindowTextA(hWndLabel[i * 8 + j], window_text_hex); 
      data_j += 4; 
     } 
    } 
    return 0; 
} 

mySerial.data是[8] [36]

回答

4

在你的for循環中,i可以3陣列。

sprintf ING於window_text_hex+3,其中有餘地字節(window_text_hex[3]windows_text_hex[4])。

sprintf%02X寫入至少字節:兩個十六進制數字和'\0'終止。
(既然你傳遞一個char,它實際上可能寫出更char往往是一個符號類型,但%X預計的unsigned int因此負輸入端(如-1)產生長輸出(FFFFFFFF)修正:。(unsigned char)window_text[i])你正在寫window_text_hex數組的末尾。