У меня есть следующий код:
tmp_data = simulated_data[index_data];
unsigned char *dem_content_buff;
dem_content_buff = new unsigned char [dem_content_buff_size];
int tmp_data;
unsigned long long tmp_64_data;
if (!(strcmp(dems[i].GetValType(), "s32")))
{
dem_content_buff[BytFldPos] = tmp_data;
dem_content_buff[BytFldPos + 1] = tmp_data >> 8;
dem_content_buff[BytFldPos + 2] = tmp_data >> 16;
dem_content_buff[BytFldPos + 3] = tmp_data >> 24;
}
if (!(strcmp(dems[i].GetValType(), "f64")))
{
tmp_64_data = simulated_data[index_data];
dem_content_buff[BytFldPos] = tmp_64_data;
dem_content_buff[BytFldPos + 1] = tmp_64_data >> 8;
dem_content_buff[BytFldPos + 2] = tmp_64_data >> 16;
dem_content_buff[BytFldPos + 3] = tmp_64_data >> 24;
dem_content_buff[BytFldPos + 4] = tmp_64_data >> 32;
dem_content_buff[BytFldPos + 5] = tmp_64_data >> 40;
dem_content_buff[BytFldPos + 6] = tmp_64_data >> 48;
dem_content_buff[BytFldPos + 7] = tmp_64_data >> 56;
}
Я получаю некоторые странные ошибки памяти в других местах приложения, когда второй оператор if верен и выполняется. Когда я закомментирую второе утверждение if, проблема работает нормально. Поэтому я подозреваю, что способ выполнения побитовых операций для 64-битных данных неверен.
Кто-нибудь может увидеть в этом коде что-то, что нужно исправить?