求教:编译器watch错误。显示的值和内存中不一样!且实际给变量赋值的话是内存中的值,

时间:2022-05-17 20:42:43
比如

BYTE* buffer 中存储了1000字节的数。buffer是首地址

然后BYTE p = buffer[100] ; 结果是没错的,比如说是0x0a;
但是如果将buffer[100]拷贝到watch栏中,会发现显示的是0xff什么的。
而且通过内存观察内存中的数据也是0x0a

我具体的试验了一下,发现前8个字节都是正确的,到第九,十个字节出现了 0x00,0xff,然后第十一个字节本该是0x02,结果编译器显示成了0xff,之后就都是错的了。

强调一下,内存中数据和实际中取值赋给变量的数据是一致的,而且也和源数据一致。
就是编译器watch显示的值很混乱。

已经遇到过两次了,求解!! 

9 个解决方案

#1


你的意思是你的buffer可以确定是顺序分配的,我认为可能不是顺序分配的 

#2


你数组溢出了吧。。。。。。。。。。

#3


我确定是顺序分配的,因为通过变量将内存中的数度出来之后,和源数据对照是一致的

#4


没有溢出,因为malloc一个很大的空间。呵呵

#5


我的意思是内存地址是连续的,不是说数据,它有可能是分配了100个,但是分成了几块

#6


呵呵,内存地址是连续的,因为通过比较源数据,再根据内存中首地址+偏移地址得出来的结果是一样的。

#7


难道说使用malloc分配的是不连续的?我记得都是连续的阿

#8


恩,要不你定义一个char *p=&buffer[108]打印出p的值(注意是p的值),以此类推,得到
p=&buffer[109]
p=&buffer[110]
把你认为不应该出错的地方的地址打出来,看他们是不是连续的

#9


内存的值也是连续的,经实验.......而且比较奇怪的是我发现就在ReadHuge函数之后这样,之前我也实验了以下,没有问题.并且malloc的字节才116字节,按理说不会出现溢出情况.

所以目前就是编译器watch显示的不对,其它都是对的.

#1


你的意思是你的buffer可以确定是顺序分配的,我认为可能不是顺序分配的 

#2


你数组溢出了吧。。。。。。。。。。

#3


我确定是顺序分配的,因为通过变量将内存中的数度出来之后,和源数据对照是一致的

#4


没有溢出,因为malloc一个很大的空间。呵呵

#5


我的意思是内存地址是连续的,不是说数据,它有可能是分配了100个,但是分成了几块

#6


呵呵,内存地址是连续的,因为通过比较源数据,再根据内存中首地址+偏移地址得出来的结果是一样的。

#7


难道说使用malloc分配的是不连续的?我记得都是连续的阿

#8


恩,要不你定义一个char *p=&buffer[108]打印出p的值(注意是p的值),以此类推,得到
p=&buffer[109]
p=&buffer[110]
把你认为不应该出错的地方的地址打出来,看他们是不是连续的

#9


内存的值也是连续的,经实验.......而且比较奇怪的是我发现就在ReadHuge函数之后这样,之前我也实验了以下,没有问题.并且malloc的字节才116字节,按理说不会出现溢出情况.

所以目前就是编译器watch显示的不对,其它都是对的.