Отладчик Visual Studio 2019 отображает неверные данные - PullRequest
0 голосов
/ 01 марта 2020

У меня есть простой класс с несколькими функциями и переменными. У меня есть функция SetData, которая должна записывать нужные переменные, однако, когда я использую отладчик Visual Studio для просмотра данных, я получаю неправильные данные, мне кажется, что смещение памяти переменных отключено на единицу внутри ошибки, тем не менее, они работают и отображаются нормально, если я создаю окно сообщений с swprintf, показывающим расположение памяти.

Я создал стандартную dll в режиме отладки, X64.

Вот что Visual Studio Watch показывает мне адрес для длины: 0x000002007a3d4c93 {2304} // При установке переменной длины в 9 в качестве значения отображается 2304, но это не так.

, а чуть ниже я пытаюсь найти его в Другой способ szText = L "длина: 9 и newLength: 9 и длина: 7a3d4c94"

Обратите внимание на разницу в 1 байт в памяти. Почему это происходит? Как я могу это исправить? Заранее большое спасибо.

PS: переход с bool на BOOL

class cClass1
{
public:
cClass1();
static cClass1* Instance();
void Draw();
void SetData(int new_row, int new_pos, int new_start, int new_length, bool new_lr, bool new_number);
void Delete();
void Clear();
void Add(char* str);
void Add(const char* str);
void Off();
void SetSc(long val);
int GetPos();
void SetPos(int new_pos);
BOOL enabled;
char value1[15];
BOOL number;
BOOL init;
private:
int pos;
int row;
int length;
BOOL lr;
int start;
char value2[24];
static cClass1* instance;
};

И фактическое определение SetData

void cClass::SetData(int new_row,int new_pos, int new_start, int new_length, bool new_lr, bool new_number)
{
    pos = new_pos;
    length = new_length;
    lr = new_lr;
    row = new_row;
    number = new_number;
    start = new_start;
    if(strlen(scratchpad) == 0)
    {
        for(int i = 0; i < length; i++)
        {
            scratchpad[i] = '-';
        }
    }
    WCHAR szText[999];
    swprintf_s(szText, 999, L"length: %d and newLength: %d and length: %08x", length, new_length, &length);
    MessageBox(NULL, szText, 0, MB_OK);
}
...