__stdcall __cdecl 引起的程序崩溃
崩溃弹出的截图如下
看到0xC0000005, 访问冲突的问题, 九成九是内存访问违规, 比如访问了已经释放的指针, 又或者是离开函数时栈被破坏之类.
找了一下午一直没有头绪, 好在有一份可以执行的源代码, 于是就将那份可执行的源代码改啊改, 改成和我的代码差不多的样子, 终于发现了问题 (我想, 这也算是查找问题的一种方式吧, 呵呵)
问题就出在了我使用的函数是__cdecl方式调用, 而要求传入的回调函数是要__stdcall调用, 结果出回调函数的时候就弹出了上面的那种对话框. 把自己写的函数前面加一个__stdcall 问题就解决了.
温习一下__stdcall, __cdecl这两种调用方式的不同, 从而就可以分析出为什么会崩溃了.
windows要求你给的那个回调函数是__stdcall这种调用方式, 即, 由函数自己来清理函数栈;
而我传入的函数是__cdecl这种调用方式, 这种调用方式是要调用者来清理它调用的函数的栈, 从而就出现了问题: windows系统调用了我给的函数, 它以为我的这个函数在离开后已经把栈给清空了, 谁知道没有, 但同时我的这个函数已经执行结束了, 但是它的栈中数据没有清空, 就是指针没有指到栈底, 还指在函数栈的某一个地方, 于是, 程序继续往下执行时, 就出现了上面的那个对话框.
关于__stdcall, __cdecl两种调用方式的不同, 参考这篇文章:http://blog.csdn.net/dengziliang001/article/details/17448789
同时他还讲解了, 为什么存在两种方式? {因为有的函数不知道自己有多少参数, 所以要调用者来清理函数栈.} 他还有一个建议: 如果函数参数都固定的话, 应该使用__stdcall调用方式, 因为这种调用方式可以跨平台.
__stdcall __cdecl 引起的程序崩溃的更多相关文章
- __stdcall,__cdecl,__fastcall的区别
__stdcall,__cdecl,__fastcall的区别 标签: dll编译器pascalclassimportinitialization 2009-12-09 15:07 10472人阅读 ...
- 调用约定__stdcall / __cdecl
__cdecl与__stdcall这两种调用约定之间的主要差别在于由谁来执行对参数的清理工作. 如果是__cdecl,那么主调函数将负责执行清理工作,如果是__stdcall那被调函数将负责执行清理. ...
- iOS-----App闪退,程序崩溃---解决方案
1.iOS-中app启动闪退的原因 2.iOS开发-闪退问题-解决之前上架的 App 在 iOS 9 会闪退问题 3.iOS-应用闪退总结 4.iOS开发-捕获程序崩溃日志 5.iOS开发-应用崩溃日 ...
- iOS - 捕获应用程序崩溃日志
作为一名iOS移动应用开发者,为了确保你的应用程序正确无误,在将应用程序提交到应用商店之前,你必定会进行大量的测试工作:而且在你测试的过程中应用程序运行的很好,但是在应用商店上线之后,还是有用户抱怨应 ...
- iOS开发-捕获程序崩溃日志
iOS开发中遇到程序崩溃是很正常的事情,如何在程序崩溃时捕获到异常信息并通知开发者,是大多数软件都选择的方法.下面就介绍如何在iOS中实现: 1. 在程序启动时加上一个异常捕获监听,用来处理程序崩溃时 ...
- android 连接蓝牙扫码枪,程序崩溃之onConfigurationChanged
当android手机通过蓝牙连接扫码枪时,程序崩溃的原因之一是:键盘弹出或隐藏,触发程序走了onDestory->onCreate的生命周期,从而可能使得页面的某些初始化数据被清除了. 解决方法 ...
- Android 程序崩溃后的处理
在应用发布以后,由于安卓机型的千差万别 ,可能会出现各种各样的问题,这时候如果我们可以将这些信息收集起来,并进行修改就很不错了.下面就来讨论一下怎么处理程序崩溃以后,错误信息的手机. Java中已经提 ...
- iOS 中捕获程序崩溃日志
iOS 中捕获程序崩溃日志 (2014-04-22 17:35:59) 转载▼ iOS开发中遇到程序崩溃是很正常的事情,如何在程序崩溃时捕获到异常信息并通知开发者,是大多数软件都选择的方法.下 ...
- 让linux中的程序崩溃时生成core文件
当我们的linux程序崩溃的时候,常常会有这样的提示: Segmentation fault (core dumped) 段错误 (核心已转储) 提示说生成了core文件,但是此功能 ...
随机推荐
- Centos warning: setlocale: LC_CTYPE: cannot change locale (UTF-8): No such file or directory
vi /etc/environment add these lines... LANG=en_US.utf-8 LC_ALL=en_US.utf-8 QQ技术交流群:576269252 ------- ...
- DevExpressXtraReport—制作雷达图
存储过程: SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ========================================== ...
- [Intellij] Project Structure 配置说明
IntelliJ IDEA 的Project structure可以在File->Project structure中打开,同时,在新建项目是IDE一般用向导的方式让你填写Project str ...
- tensorflow prelu的实现细节
tensorflow prelu的实现细节 output = tf.nn.leaky_relu(input, alpha=tf_gamma_data,name=name) #tf.nn.leaky_r ...
- Spring JDBC SqlQuery类示例
org.springframework.jdbc.object.SqlQuery类提供了表示SQL查询的可重用操作对象. 使用到的 Student 表的结构如下 - CREATE TABLE Stud ...
- adv7180驱动
http://download.csdn.net/download/u013308744/9945184 http://www.ebaina.com/bbs/thread-10121-1-1.html ...
- 转载:帮你提升 Python 的 27 种编程语言
帮你提升 Python 的 27 种编程语言: 出处:http://www.oschina.net/translate/languages-to-improve-your-python
- R语言绘制带errorbar 的柱状图
代码示例: data <- data.frame(mean = c(10, 15), sd = c(12, 17)) rownames(data) <- c("case" ...
- 一款CSS3仿Google Play的垂直菜单
之前分享过一款非常酷的CSS3垂直下拉动画菜单,是多级菜单.今天我们来看一款也是用CSS3制作的垂直菜单,是仿Google Play的菜单,菜单项都带有可爱的小图标,可以先来看看效果图: 当然你可以在 ...
- Some Java exceptions, messages and errors.
http://www.antapex.org/messages_java.txt http://www.jvmmonitor.org/index.html