堆栈arround变量已损坏

时间:2015-10-02 14:45:48

标签: c visual-c++

运行此代码时,我编码错误:变量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]

的数组

1 个答案:

答案 0 :(得分:4)

在for循环中,i可以是3

您是sprintf 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数组的结尾。