博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MFC 堆栈溢出 test dword ptr [eax],eax ; probe page.
阅读量:6463 次
发布时间:2019-06-23

本文共 998 字,大约阅读时间需要 3 分钟。

今天调试程序的时候,发现一个奇怪的问题,之前调试都没问题的,今早加了一点东西,就出现错误,跳到调试位置,如下4行红色部分

 

1 ; Find next lower page and probe2 cs20:3         sub     eax, _PAGESIZE_         ; decrease by PAGESIZE4         test    dword ptr [eax],eax     ; probe page.5         jmp     short cs106 7 _chkstk endp8 9         end

感觉好奇怪,然后断点调试,连程序的入口都没进就出现了这个错误,好郁闷。

 

然后百度一下,原来是因为局部变量申请的空间过大,大于了1M。

局部变量的申请空间是存放于栈中,windows里默认栈内存是1M,所以当申请空间大于1M时就会出现溢出错误。

查看了一下源代码,原来今天早上增加了一个结构体数组,数组超出堆栈的大小了。

在类中有如下定义:

//色亮度数据    struct LXY    {        float L; //亮度        float x; //色度x        float y; //色度y    };    LXY LxyData[HIGHTH][WIDTH]; //整个画面数据

另外

1 #define WIDTH  640  //像素宽度2 #define HIGHTH 480  //像素高度

这样下来这个数组所占的空间为 640*480*(4+4+4)= 3686400B = 3600KB = 3.515625M

对于这种情况,解决办法就是修改数组的定义,换成动态数组

1 CArray
LxyData;

要么就是扩大栈空间的大小。

扩大空间堆栈大小的方法是

Project->Properties->Configuarations Properties->Linker->System->Stact Reserve Size

例如修改成5M,可以输入5242880

1024*1024*5 = 5242880

这样修改后程序就可以正常运行了。

 

俩儿子

转载于:https://www.cnblogs.com/fredliu/p/4845563.html

你可能感兴趣的文章
瑞星:周末拦截挂马网站数减少 新闻类网站占主打
查看>>
REST服务开发实战,互联网营销
查看>>
一起谈.NET技术,验证.NET强命称的思路和实例
查看>>
java springcloud版b2b2c社交电商spring cloud分布式微服务(十八)定时任务(Scheduling Tasks)...
查看>>
基于headless chrome的游戏资源下载实现 (初版)
查看>>
引用传递函数值
查看>>
第一周:JavaEE——课程目标
查看>>
ICP(迭代最近点)算法
查看>>
python 基础 切片 迭代 列表生成式
查看>>
编写脚本,开始场景有两个球体,两者之间距离为10,当距离大于10时,两个球相向运动,两个球接触后反向运动,反复运动...
查看>>
django 快速实现session的操作
查看>>
python json数组对象排序
查看>>
419. Battleships in a Board
查看>>
触发器错误 :消息 512,级别 16,状态 1 子查询返回的值不止一个
查看>>
Docker教程系列七:Docker上部署Redis
查看>>
百度地图3.7.1的卫星地图,实时交通的改变
查看>>
双色球(数组实现)
查看>>
Harris算子进行角点检测算法
查看>>
Bugku-CTF之web2-听说聪明的人都能找到答案
查看>>
跳转语句(break、continue)
查看>>