小技巧解决: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为自注册插件,但是安装包运行安装过程报错,提示访问违规。于是我看他的注册代码,也仅仅是向注册表写入一些键值,并无其它,并且注册表操作也已成功。一时摸不...

C++中变量,函数的作用域和生命周期?

编程中需要深刻理解的最基础的东西就是: 1、变量的作用域和生命周期; 2、函数的作用域和生命周期; C++程序执行时,内存块的划分。 1、栈区:编译器自动分配内存,回收内存。存放函数...

Java 静态变量和实例变量的生命周期

java类的成员变量有俩种:一种是被static关键字修饰的变量,叫类变量或者静态变量;另一种是实例变量,通常有new 关键字初始化。   在语法定义上的区别:静态变量前要加static关键字,而实...

C++循环变量定义生命周期

    C++与C的一个最大的不同的是C要求所有变量要在最开始的就声明,而C++的变量是信手拈来,你什么时候想用,你就什么时候声明。这个简单的细节其实隐含了C与C++的设计逻辑有所区别。    C设计...

Lua变量生命周期

Lua变量的定义是很自由的,不需要像C语言那样必须指明类型,变量可以是任何“值”,比较特殊的一点是,可以把任何function赋值给变量,如: var = function()print("some...

php的扩展和嵌入--php的生命周期与变量详述

首先开始介绍php的生命周期,了解一个php程序从开始运行到最后结束究竟经过怎么样的过程,对学习php和平时php开发应该是很重要的。 起始和关闭阶段: 对于php的起始和关闭阶段可以分成两层, ...

Servlet的生命周期和变量范围

Servlet的生命周期和变量范围 1、引出:为什么要了解变量声明周期 第一、               我们知道程序在运行时间都要加载到内存中执行,而变量也同样需要分配一定的内存,对于引用类型...

Application 生命周期以及如何用做全局变量

导语:在安卓开发时候,我们正常的app都会有一个“大脑指挥总部”,那就是我们抽象出来的管理类,还要有一个全局的大脑中的大脑,那就是Application类。 **简介:**Application是应...

关于linux的export命令和shell变量的生命周期,环境变量

export:将自定义变量设定为系统环境变量(当前shell中有效) 功能说明:设置或显示环境变量。 语  法:export  [-fnp][变量名称]=[变量设置值] 补充说明:...

ES6 变量作用域与提升:变量的生命周期详解

ES6 变量作用域与提升:变量的生命周期详解从属于笔者的现代 JavaScript 开发:语法基础与实践技巧系列文章。本文详细讨论了 JavaScript 中作用域、执行上下文、不同作用域下变量提升...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:小技巧解决:vector变量引用,传入dll库函数中,增加内容,vector变量生命周期结束的时候,会触发断点
举报原因:
原因补充:

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