一个全局变量引起的DLL崩溃

参考我发的帖子:

http://bbs.csdn.net/topics/390737064?page=1#post-397000946

现象是exe程序在加载dll的时候崩溃了,莫名其妙的崩溃了。换其它DLL没问题,我又写了个DEMO程序使用这个DLL也是一个现象,用OD加载EXE,用ODDLLLOADER加载DLL,结果也是一样的崩。。搞的我也差点崩溃了。。

加载上微软符号表后发现:

然后自然而然的一个一个内核函数去查找去找可能,百度谷歌都翻了,看雪论坛也看了。

法个克,这个问题找了很长时间。我一直认为是项目配置错误导致的问题,跟代码无关。

最后发现是由于DLL中一个全局变量的构造函数中,给其成员变量分配的内存过大了,导致程序崩溃了。。分配的内存也不过是4096*1000这么个大小,导致栈溢出了。

在CU找到了一个同样问题的帖子。。MARK下。

http://bbs.chinaunix.net/thread-3732299-1-1.html

时间: 2024-11-02 10:32:29

一个全局变量引起的DLL崩溃的相关文章

c++多个源文件共用一个全局变量(extern 的用法)

例子: 头文件:state.h    源文件:state.cpp 其它源文件:t1.cpp   t2.cpp  t3.cpp,  这些源文件都包含头文件state.h. 需要定义一个全局变量供这些源文件中使用:方法如下 1.在 state.h声明全局变量: extern int a; 2.在state.cpp中定义该全局变量:int a = 10; 这样其它源文件就可以使用该变量啦 这里需要的是“声明”,不是“定义”!根据C++标准的规定,一个变量声明必须同时满足两个条件,否则就是定义:    

std::wstring跨dll 崩溃

今天用个测试exe调用了个dll,有个接口返回std::wstring,经调试发现挂在该函数return之后,怀疑是string不适合作为返回值,百度一番发现下面这篇解释的很详细. STL跨平台调用会出现很多异常,你可以试试. STL使用模板生成,当我们使用模板的时候,每一个EXE,和DLL都在编译器产生了自己的代码,导致模板所使用的静态成员不同步,所以出现数据传递的各种问题,下面是详细解释. 原因分析: 一句话-----如果任何STL类使用了静态变量(无论是直接还是间接使用),那么就不要再写出

ios下一个4字节对齐引起崩溃的问题

staticvoid TEACore(unsignedint in[2], unsignedint out[2], unsignedint key[4], long rounds) { unsigned int y = in[0], z = in[1]; unsigned int limit = 0, sum = 0; if(rounds > 0)// encrypt { limit = DELTA * rounds; while(sum != limit) { y += ((z<<4)

c++多个文件中如何共用一个全局变量

例子: 头文件:state.h   源文件:state.cpp 其它源文件:t1.cpp  t2.cpp  t3.cpp, 这些源文件都包含头文件state.h. 需要定义一个全局变量供这些源文件中使用:方法如下 1.在 state.h声明全局变量: extern inta; 2.在state.cpp中定义该全局变量:int a =10; 这样其它源文件就可以使用该变量啦 这里需要的是"声明",不是"定义"!根据C++标准的规定,一个变量声明必须同时满足两个条件,否

ajax 异步调用把返回值赋给一个全局变量的用法,最主要的就是把async属性改为 false,

<script> $(document).ready(function () { <% string dqsj = System.DateTime.Now.ToString("yyyy-MM-dd"); %> seach(); }); var shuju = ""; var sj = ""; function se() { seach(); } function seach() { $(function () { var

37、如何在函数中设置一个全局变量 ?

在函数的内部,通过global声明,使在函数内部中设置一个全局变量,这个全局变量可以在任意的函数中进行调用! SOLR_URL='http://solr.org' def tt(): global SOLR_URL SOLR_URL=SOLR_URL+'#aa' def aa(): if __name__=='__main__': tt() print(SOLR_URL) aa() # http://solr.org#aa 原文地址:https://www.cnblogs.com/zhuifen

安卓声明一个全局变量,每个activity都可以调用和修改

当需要一个变量,每个activity都能够调用和修改的时候,可以先创建一个类,让他继承Application,并实现一些方法就行了,下面的例子:App打开,文本显示全局变量的初始值,点击按钮,文本值改变,并更新显示. 首先创建一个类:Myapplication.java package com.example.application; import android.app.Application; public class Myapplication extends Application {

python中global除了声明一个全局变量,还有什么作用?

a = 100 def demo1(): a = 10 print(a) def demo2(): globa a a = 10 print(a) demo1() print(a) demo2() print(a) 结果为: 10 100 10 10 说明通过globa声明后,demo2中相对于对全局变量a进行了重新赋值 就是好奇,哪有功能这个单一的关键字,那globa除了声明全局变量修改作用域外,还能做什么?python数据分析的书有没有好的推荐? 原文地址:https://www.cnblo

主程序与DLL之间的全局变量问题

http://www.cnblogs.com/railgunman/archive/2010/11/29/1891200.html 主程序与DLL之间的全局变量问题 有几个朋友经常向我问题在DLL中怎么共用一个全局变量.比如像用户登陆后的用户名(UserName)... 其实这个问题很简单.下面我把我的做法写出来大家一起分享. 把共享的变量放在主程序里:UserName,....等等, 在主程序里写两个函数 Function CurUserName():PChar; begin Result:=