崩溃弹出的截图如下

看到0xC0000005, 访问冲突的问题, 九成九是内存访问违规, 比如访问了已经释放的指针, 又或者是离开函数时栈被破坏之类.

找了一下午一直没有头绪, 好在有一份可以执行的源代码,  于是就将那份可执行的源代码改啊改,  改成和我的代码差不多的样子, 终于发现了问题 (我想,  这也算是查找问题的一种方式吧,  呵呵)

问题就出在了我使用的函数是__cdecl方式调用,  而要求传入的回调函数是要__stdcall调用,  结果出回调函数的时候就弹出了上面的那种对话框.  把自己写的函数前面加一个__stdcall 问题就解决了.

温习一下__stdcall, __cdecl这两种调用方式的不同,  从而就可以分析出为什么会崩溃了.

windows要求你给的那个回调函数是__stdcall这种调用方式,  即, 由函数自己来清理函数栈;
而我传入的函数是__cdecl这种调用方式,  这种调用方式是要调用者来清理它调用的函数的栈, 从而就出现了问题:  windows系统调用了我给的函数,  它以为我的这个函数在离开后已经把栈给清空了,  谁知道没有,  但同时我的这个函数已经执行结束了,  但是它的栈中数据没有清空, 就是指针没有指到栈底, 还指在函数栈的某一个地方,  于是, 程序继续往下执行时,  就出现了上面的那个对话框.

关于__stdcall, __cdecl两种调用方式的不同, 参考这篇文章:http://blog.csdn.net/dengziliang001/article/details/17448789

同时他还讲解了,  为什么存在两种方式?  {因为有的函数不知道自己有多少参数,  所以要调用者来清理函数栈.}   他还有一个建议: 如果函数参数都固定的话, 应该使用__stdcall调用方式, 因为这种调用方式可以跨平台.

__stdcall __cdecl 引起的程序崩溃相关推荐

  1. windows程序崩溃调试终极武器

    windows程序崩溃调试终极武器---dump文件 一.前言 前不久开发了一款windows程序,目前已经是测试跑了,对于windows程序熟悉的童鞋,应该都知道一个事,就是他运行时有一个黑框,如果 ...

  2. c语言中字符串数组的地址存放以及%s输出单个字符导致程序崩溃的问题

    代码 总结下c语言中字符串数组的地址存放问题 #include <iostream> using namespace std; #include<bits/stdc++.h>i ...

  3. Linux下程序崩溃dump时的 core文件的使用方法

    Linux下程序崩溃dump时的 core文件的使用方法 1.在启动程序前执行 ulimit -c unlimited unlimited 表示生成文件的大小限制,也可以修改为自定义的大小,例如: u ...

  4. 【Qt】Qt信号与槽使用不当,使程序崩溃

    问题描述 跨线程使用Qt信号和槽,信号发送时间间隔小于槽函数处理时间时,造成程序崩溃. 原因分析 跨线程使用Qt信号和槽时,connect默认是QueuedConnection,队列连接方式. 信号传 ...

  5. Go程序崩溃现场应该如何保留?

    Go 程序突然莫名崩溃后,当日志记录没有覆盖到错误场景时,还有别的方法排查吗? 没有消灭一切的银弹,也没有可以保证永不出错的程序.我们应当如何捕捉 Go 程序错误?我想同学们的第一反应是:打日志. 但 ...

  6. android查找邮件程序,Android 程序崩溃日志邮件获取

    版权声明:本文为博主原创文章,未经博主允许不得转载. 在我们开发Android应用程序的时候,BUG的出现是难以避免的,时不时还会出现崩溃的情况,这个时候,我们急需知道造成问题的原因是什么,但是,在没 ...

  7. C++程序崩溃生成dump

    程序在运行时,难免会有一些异常情况发生,特别是在条件不容许去挂调试器的时候,如何快速的定位错误的方法就显得很重要. 日志一直都是一种很重要的定位错误的方法,出得好的日志可以方便程序员快速的定位问题所在 ...

  8. iOS 中捕获程序崩溃日志

    iOS开发中遇到程序崩溃是很正常的事情,如何在程序崩溃时捕获到异常信息并通知开发者,是大多数软件都选择的方法.下面就介绍如何在iOS中实现: 1. 在程序启动时加上一个异常捕获监听,用来处理程序崩溃时 ...

  9. Windows 7 应用程序崩溃恢复

    从Vista 到Windows 7 这两款操作系统都带有应用程序恢复和重启(ARR)功能,利用这个特性可以在应用程序处于无响应甚至崩溃状态时,保存当前正在处理的数据,并将应用程序以及之前的数据恢复.本 ...

最新文章

  1. (转)命令行下,用 xcodebuild 生成ipa文件,通过 itms-services 协议安装
  2. 这个安全平台结合Spring Security逆天了,我准备研究一下
  3. 第二章 数组名是一个指针常量吗?
  4. 解决Win10不能访问共享文件夹的问题
  5. mysql 随机查询数据
  6. 扫描二维码读取文档_使用深度学习读取和分类扫描的文档
  7. android 环绕布局,Android自定义View实现圆形环绕效果
  8. Grafana : 前端页面 通过API Key免登录访问Grafana
  9. HDU 3861 The King’s Problem (强连通缩点+DAG最小路径覆盖)
  10. Linux的进程/线程/协程系列4:进程知识深入总结:上篇
  11. 中国临床数据分析市场趋势报告、技术动态创新及市场预测
  12. Angular企业级开发(3)-Angular MVC实现
  13. WORD 同一位置连续引用多个参考文献编辑技巧
  14. 【Python入门练手小项目】画一个蓝胖子❤️
  15. #9733;双十一背后的消费心理
  16. Virtex6 PCIe 超简版基础概念学习(二)(转载)
  17. IDEA项目can not reconnect错误
  18. 工件SSM:war exploded: 部署工件时出错。请参阅服务器日志了解详细信息
  19. 【六更完结!由于字数限制开新文章继续】零基础信号与系统学习笔记:复指数信号、傅里叶级数的系数推导、三角函数正交性、离散傅里叶变换、相位补偿、z变换表、逆变换表、常见序列及其作用
  20. Kali Linux渗透测试——WEB渗透(一)

热门文章

  1. poj2955 Brackets (区间dp)
  2. hibernate联合主键 注解方式
  3. 2的次幂表示【递归算法训练】
  4. 利用路由器端口映射远程连接
  5. 在FIREBUG控制台中输入 jQuery() 返回 []
  6. pip install scrapy安装scrapy库出现error: Microsoft Visual C++ 14.0 is required.问题解决
  7. Notepad++便签模式
  8. Log4j2进阶使用(Pattern Layout详细设置)
  9. c++ class struct同名_如何把C++的源代码改写成C代码?而C改C++只需一步!
  10. JS:正则表达式详细语法基础