当前位置: 首页 > news >正文

C++代码中 栈溢出错误 chkstk.asm 一则

 

瞎整了半天之后,还是老老实实打开反汇编一步步看回调过程中发生了什么,居然在回调后,所有参数入栈后,调用chkstk.asm崩溃了,我晕倒,这个问题居然,回过头看C++代码,找找有啥大对象在栈里面晃悠,结果一看,居然有几处使用的是char[64*1024]的形式,这几处正好在一个函数调用中都递归了,于是光荣的越界了。于是修改那几处缓冲到堆上,问题解决了。

 

  下面说下我对于char[size]形式的理解,由于char[]是编译期间分配内存的行为,估计对于一些耗用资源不大的调用,当然首先char[]的形式,但是如果需要的内存比较大,还是取堆中取,防止栈空间不足的崩溃。

  我的习惯风格:

  static const int N_MAX_STACK_BUFFER = 128;

  

  TCHAR szBuffer[128] = {0};
 

  TCHAR * pBuffer = szBuffer; 
 

  int nSize = GetBufferSize(); 
 

  if (nSize >= N_MAX_STACK_BUFFER)
 

  {

     pBuffer = new TCHAR[nSize]; 
 

  }

 

  // Action

 

  if (nSize >= N_MAX_STACK_BUFFER)
 

  {

    delete [] pBuffer;
 

    pBuffer = NULL;

  } 
 

 

  至此,第二个问题解决,但是第一个问题很诧异,也没有崩溃现象,怀疑是Debug作祟,切换到Release,把地址答应出来,OK,都正常了。这个VC的编译器还是比较邪门的。

  另外,发现自己行文中闲扯真多。不是好习惯。















本文转hackfreer51CTO博客,原文链接:http://blog.51cto.com/pnig0s1992/783152,如需转载请自行联系原作者

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 智能语音技术的深度解析
  • Python3代码工程化加密
  • Java基础 - 标识符
  • docker 创建容器 时的 注意事项
  • Color Challenge 隐私政策
  • rpm-yum-make
  • iOS对象属性详解
  • 匹配分词
  • NSNotificationCenter传值
  • [ NOI 2001 ] 食物链
  • tomcat8 安装部署--一键版本
  • 【SSH网上商城项目实战25】使用java email给用户发送邮件
  • extjs 之columntree 自定义分页工具条
  • javascript基础修炼(9)——MVVM中双向数据绑定的基本原理
  • python lambda的详细介绍
  • 【译】JS基础算法脚本:字符串结尾
  • ES6指北【2】—— 箭头函数
  • conda常用的命令
  • Create React App 使用
  • java取消线程实例
  • LeetCode18.四数之和 JavaScript
  • leetcode46 Permutation 排列组合
  • Markdown 语法简单说明
  • Mysql5.6主从复制
  • php面试题 汇集2
  • react 代码优化(一) ——事件处理
  • ReactNativeweexDeviceOne对比
  • Vue 2.3、2.4 知识点小结
  • 闭包--闭包之tab栏切换(四)
  • 前端学习笔记之观察者模式
  • 写代码的正确姿势
  • 一个SAP顾问在美国的这些年
  • 移动互联网+智能运营体系搭建=你家有金矿啊!
  • 与 ConTeXt MkIV 官方文档的接驳
  • C# - 为值类型重定义相等性
  • kubernetes资源对象--ingress
  • ​​​【收录 Hello 算法】10.4 哈希优化策略
  • ​卜东波研究员:高观点下的少儿计算思维
  • ​直流电和交流电有什么区别为什么这个时候又要变成直流电呢?交流转换到直流(整流器)直流变交流(逆变器)​
  • #Datawhale AI夏令营第4期#AIGC文生图方向复盘
  • (C++17) optional的使用
  • (delphi11最新学习资料) Object Pascal 学习笔记---第13章第1节 (全局数据、栈和堆)
  • (JSP)EL——优化登录界面,获取对象,获取数据
  • (第8天)保姆级 PL/SQL Developer 安装与配置
  • (附源码)springboot电竞专题网站 毕业设计 641314
  • (九十四)函数和二维数组
  • (六)Flink 窗口计算
  • (十)c52学习之旅-定时器实验
  • (十)DDRC架构组成、效率Efficiency及功能实现
  • (顺序)容器的好伴侣 --- 容器适配器
  • (一)appium-desktop定位元素原理
  • (已解决)Bootstrap精美弹出框模态框modal,实现js向modal传递数据
  • (原創) 博客園正式支援VHDL語法著色功能 (SOC) (VHDL)
  • (转)机器学习的数学基础(1)--Dirichlet分布
  • (转载)CentOS查看系统信息|CentOS查看命令