У меня есть простой класс с несколькими функциями и переменными. У меня есть функция 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);
}