vector :: push_back cause一个堆已经在确切的地址被破坏了

时间:2016-12-23 16:07:45

标签: c++

我有一个关于使用vector管理资源的简单代码。 但是当我跑到这一行时:

sentClientList.push_back(socket);

它随着这个exeption throw随机中断:一个堆已经被破坏(参数:0x76F9D8D0)。我在这里注意到的是每次触发的地址始终相同。 Here is the bug enter image description here

我尝试调试,但它只在需要时发生,每次运行程序时都只发生一次。但是当我按下继续时,向量中的第一个值变为正常,它只是忽略了错误并且可能会运行。

以下是问题:

  1. 我可以用什么方式破坏矢量中的数据而不触及它?
  2. 无论如何都会自动忽略此错误?
  3. 我可以使用try catch来捕获它吗?

1 个答案:

答案 0 :(得分:3)

  
      
  1. 我可以用什么方式破坏矢量中的数据而不触及它?
  2.   

E.g。使用创建std::vector变量来破坏堆栈。考虑是否有意外覆盖任何数据(例如管理该向量的指针)。矢量变量被搞砸了,不能再合理使用了。

  
      
  1. 无论如何都会自动忽略此错误?
  2.   

不,你的完整程序在那时搞砸了(如上所述)。你不能忽视这一点。

进一步的步骤是未定义的行为,理论上可以导致

  • 你的薛定谔猫死了(或没有)
  • 您的冰箱爆炸(因为触发了奇怪的物联网反馈)
  • 小恶魔飞出你的鼻孔
  • Time travel
  • ...
  
      
  1. 我可以使用try catch来捕获它吗?
  2.   
不,你不能。这对于异常处理没有任何意义。

虽然有valgrindequivalent tools for Visual Studio等工具可以帮助调试腐败来源。

对于 off-topic 问题的答案感到抱歉,但这对于评论来说太大了。