小技巧解决:vector变量引用,传入dll库函数中,增加内容,vector变量生命周期结束的时候,会触发断点

原创 2016年10月11日 12:24:03

断点的提示:

Windows已在XX中触发一个断点。

其原因可能是堆被破坏,这说明XX中或它加载的任何Dll中有Bug

原因也可能是用户在XX具有焦点时,按下了F12


原因分析:dll库函数里面如果调用vector的push_back相当于在dll里面分配内存,然后在另外模块释放,这个时候就会触发断点。

解决思路:dll库函数里面,不调用vector的push_back。

解决方案1:

1.第一次传入一个空的vector引用,dll库函数检测vector的size如果是0则返回需要的size。

2.在原位置push_back足够的数量;

3.再次调用dll函数,传入vector引用,dll库函数逐个修改vector成员;

解决方案2:

模块间函数调用的传参的时候,尤其是有分配内存之类的动作的时候,最好是用传值的方式。

dll模块生命周期bug讨论

昨天在安装包中加入一个同事新编写的Dll,此Dll为自注册插件,但是安装包运行安装过程报错,提示访问违规。于是我看他的注册代码,也仅仅是向注册表写入一些键值,并无其它,并且注册表操作也已成功。一时摸不...
  • xbgprogrammer
  • xbgprogrammer
  • 2014年12月11日 17:47
  • 1282

在DLL间或者DLL与EXE之间传递vector对象或指针的问题

vector 析构 容器 dll接口 exe
  • cbNotes
  • cbNotes
  • 2014年08月14日 11:15
  • 3695

变量的生命周期和{ }的相关知识

生命周期如果和寄存器、内存什么的挂钩,就变得不那么好理解。、 其实生命周期的概念也很简单,无非就是变量从哪到哪有效。这里只说生民周期和大括号{ }的联系 浅显一点说,一个变量的生命周期就是从上一个...
  • u011497904
  • u011497904
  • 2015年01月16日 11:09
  • 1050

C++ 静态变量的初始化 以及 vector的初始化

《深入浅出MFC》这样解释:    Static 成员不属于对象的一部分,而是类的一部分。所以程序可以在没有诞生分和   对象的时候就处理此种成员变量.但必须首先初始化它。   不要把stati...
  • CNHK1225
  • CNHK1225
  • 2015年11月11日 10:51
  • 5368

一个引用相关问题,延长临时变量的生命周期

string fun() { return "some"; } /////// 情况一 //// const char* c = fun().c_str(); ////// 情况二 ...
  • backard
  • backard
  • 2013年01月20日 12:42
  • 1012

C++ vector变量等导致内存泄露问题的解决方法

之前在做一个音频特征提取的批量处理程序,老是出现内存泄露问题,用Visual Leak Detector(VLD)工具做了下检测,检测出了一些问题,解决后还是会有问题。之后继续排查,因为我的代码中,大...
  • cdjcong
  • cdjcong
  • 2016年03月09日 21:26
  • 3627

Dll中运用vector的堆栈崩溃

今天在调试程序的时候遇到了这个问题。 先给出出问题的代码: [.dll] vector getPerList(){return _perList;} vector getGrpList(){ret...
  • han6771306
  • han6771306
  • 2014年04月15日 23:43
  • 1012

c++中vector做形参传递问题

最近工作遇到了想传递vector容器的问题,于是找了很多资料查看了一下,自己也通过调试理解了一下, 代码: 如图:代码第69行定义了一个vector,然后我写了3个初始化容器的函数in...
  • u012987441
  • u012987441
  • 2016年09月19日 11:27
  • 5348

vector用法总结(定义,操作,方法,注意点)

一、vector的基本概念 vector是同一种类型的对象的集合,每个对象都有一个对应的整数索引值。和string对象一样,标准库负责管理存储元素的相关内存。我们把vector称为容器,是因为它...
  • u014644410
  • u014644410
  • 2015年04月05日 15:08
  • 7129

STL之Vector相关方法积累

vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单地说,vec...
  • ghevinn
  • ghevinn
  • 2014年03月21日 15:41
  • 12249
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:小技巧解决:vector变量引用,传入dll库函数中,增加内容,vector变量生命周期结束的时候,会触发断点
举报原因:
原因补充:

(最多只允许输入30个字)