当前位置: 首页 > 科技观察

记忆被“无意”破坏,真相如何?

时间:2023-03-19 20:58:22 科技观察

大家好,我是小风哥。内存是C/C++程序员的好帮手。我们通常说的C/C++程序之所以有更高性能的原因之一就是它们可以自己管理内存。然而,计算机科学中没有包治百病的技术。内存问题也给C/C++程序员带来了无尽的烦恼。野指针、数组越界、错误的内存分配或释放、多线程读写导致内存破坏等等,都会导致内存中某段数据被“无意”破坏。此类错误通常很难定位,因为当程序开始出现异常时,通常与真正的问题相去甚远,通常很难用常见的程序调试方法来排查此类问题。由于这种问题一般是内存读写引起的,如果能在某块内存被修改或读取时观察到这个事件就好了。幸运的是,这种技术已经实现了。示例在GDB中,您可以通过添加观察点来观察一段内存。当这段内存被修改时,程序就会停止。至此,我们就可以知道是哪一行代码修改了内存。这个功能是不是很强大?.下面用一个例子来说明一下,有这么一段代码:#include#includeusingnamespacestd;//线程修改变量值voidmemory_write(int*value){*value=1;}intmain(){inta=10;//获取局部变量a的地址int*c=&a;对于(inti=0;i<100;i++){a+=i;}cout<