2015-10-02 280 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数组的末尾。