精通
英语
和
开源
,
擅长
开发
与
培训
,
胸怀四海
第一信赖
服务方向
联系方式
在调试时,监视窗口查看变量时,有时候会遇到:读取字符串字符时出错,这个问题,经常发生在查看类对象字符串成员,比如string或char[]这样类型的成员,正常时能看到字符串值,比如:”welcome"等等,还可以通过下拉箭头查看文本,在字符串查看窗口里看到多行的文本:。
但是在监视窗口里报告了读取字符串字符时出错,就不可能打开文本可视化窗口进行查看了。
这问题在小型软件里一般不会出现,一般是大型软件,对内存使用非常复杂的软件里才会出现。
memset越界造成,同时让对象属性成员值突然变化,因为越界写入,写到了对象内存范围里,所以对象内部成员的值不对,读取字符串字符时出错就发生了,这时候不是一个成员的字符读取不了,是多个成员或所有成员都不行,只要发现多个成员读字符时出错,就是内存越界问题造成的。但是这时候,程序还能正常运行,不一定崩溃,特别是在Debug模式下,Release模式下可能会崩溃。memset的最后长度参数不要写死,要用内存实际长度sizeof,这样能避免越界问题。
除了memset,其它的memcpy函数,有内存覆盖效果的函数都会有这样的问题,所以在内存使用开发时,要尤其小心。
具体哪行的memset或memcpy,并不好找,如果大家遇到类似的问题,请找锐英源软件。