gpt4 book ai didi

C++ 64 位问题

转载 作者:行者123 更新时间:2023-11-27 23:34:01 25 4
gpt4 key购买 nike

我有以下代码:

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 位数据执行按位运算的方式不正确。

任何人都可以看到这段代码中需要更正的地方吗?

最佳答案

我怀疑 dem_content_buff_sizeBytFldPos 之间存在交互。如果以下情况不成立:

assert(dem_content_buff_size > (BytFldPos + 7));

然后你将溢出你的缓冲区。

关于C++ 64 位问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2450163/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com