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]
把你认为不应该出错的地方的地址打出来,看他们是不是连续的
p=&buffer[109]
p=&buffer[110]
把你认为不应该出错的地方的地址打出来,看他们是不是连续的
#9
内存的值也是连续的,经实验.......而且比较奇怪的是我发现就在ReadHuge函数之后这样,之前我也实验了以下,没有问题.并且malloc的字节才116字节,按理说不会出现溢出情况.
所以目前就是编译器watch显示的不对,其它都是对的.
所以目前就是编译器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]
把你认为不应该出错的地方的地址打出来,看他们是不是连续的
p=&buffer[109]
p=&buffer[110]
把你认为不应该出错的地方的地址打出来,看他们是不是连续的
#9
内存的值也是连续的,经实验.......而且比较奇怪的是我发现就在ReadHuge函数之后这样,之前我也实验了以下,没有问题.并且malloc的字节才116字节,按理说不会出现溢出情况.
所以目前就是编译器watch显示的不对,其它都是对的.
所以目前就是编译器watch显示的不对,其它都是对的.