解决VC++“User breakpoint called from code at XXX”问题

 

使用VC++调试,出现形如“User breakpoint called from code at XXX”的提示,但自己并没有设置断点,为何?

 

假如不调试,程序可以正常运行,但想要自己设置断点的时候就会产生极大影响(尤其是在循环中遇到这个问题,调试起来会非常痛苦)。

起初我以为是编译器的问题,因为毕竟程序运行正常的,但参考网上一些资料后发现问题不小。

 

仔细观察debug输出,发现有类似这样的提示:

HEAP: Free Heap block 3731a8 modified at 3731e8 after it was freed

 

根据网上的论述,简单地说就是修改、调用了已经被delete了的内存。理解起来倒是挺简单,别人遇到这个问题后基本通过管理好delete操作来解决,可是我根本没有用delete啊!

但自习思考后我发现了自己的疏忽:我使用了STL的vector,并创建了指针指向其内部的数据。vector是会自行动态调整的啊!为了提高随机访问的效率,vector“长大”时是新申请连续空间并删除原有空间的!vector自己调用delete了……

 

更专业的原理请参考:

http://blog.vckbase.com/hyj/archive/2006/06/28/21006.html

你可能感兴趣的:(Fragment,&,Tips)