我有以下代碼:C++ 64位問題
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位數據執行按位操作的方式不正確。
任何人都可以在此代碼中看到任何需要更正的內容嗎?
在聲明tmp_data之前如何賦值?你應該發佈你的* real *代碼,因爲這不會被編譯。 – 2010-03-15 20:19:39
什麼是dem_content_buff_size? – 2010-03-15 20:20:43
這些都不會回答你的問題,但是:1)你可能想要交換第一行和第四行2)tmp_64_data的目的是什麼? 3)如果第二個「if」是「else if」? – 2010-03-15 20:21:05