MFC 堆栈溢出 test dword ptr [eax],eax ; probe page.
今天调试程序的时候,发现一个奇怪的问题,之前调试都没问题的,今早加了一点东西,就出现错误,跳到调试位置,如下4行红色部分
; Find next lower page and probe
cs20:
sub eax, _PAGESIZE_ ; decrease by PAGESIZE
test dword ptr [eax],eax ; probe page.
jmp short cs10 _chkstk endp end
感觉好奇怪,然后断点调试,连程序的入口都没进就出现了这个错误,好郁闷。
然后百度一下,原来是因为局部变量申请的空间过大,大于了1M。
局部变量的申请空间是存放于栈中,windows里默认栈内存是1M,所以当申请空间大于1M时就会出现溢出错误。
查看了一下源代码,原来今天早上增加了一个结构体数组,数组超出堆栈的大小了。
在类中有如下定义:
//色亮度数据
struct LXY
{
float L; //亮度
float x; //色度x
float y; //色度y
}; LXY LxyData[HIGHTH][WIDTH]; //整个画面数据
另外
#define WIDTH 640 //像素宽度
#define HIGHTH 480 //像素高度
这样下来这个数组所占的空间为 640*480*(4+4+4)= 3686400B = 3600KB = 3.515625M
对于这种情况,解决办法就是修改数组的定义,换成动态数组
CArray<LXY,&LXY> LxyData;
要么就是扩大栈空间的大小。
扩大空间堆栈大小的方法是
Project->Properties->Configuarations Properties->Linker->System->Stact Reserve Size
例如修改成5M,可以输入5242880
1024*1024*5 = 5242880
这样修改后程序就可以正常运行了。
俩儿子
MFC 堆栈溢出 test dword ptr [eax],eax ; probe page.的更多相关文章
- test dword ptr [eax],eax ; probe page.局部数组变量定义所分配的最大空间为1M
问题的出现 使用VS2017编写程序时,程序编译可以通过,但运行时就会弹出错误 经过查证发现: 这跟局部数组变量定义所分配的最大空间设置大小有关. 局部变量的申请空间是存放于栈中,windows里默认 ...
- 00405EB0 mov eax,dword ptr [ecx] 是什么意思?
dword 双字 就是四个字节ptr pointer缩写 即指针[]里的数据是一个地址值,这个地址指向一个双字型数据比如mov eax, dword ptr [12345678] 把内存地址12345 ...
- MOV EAX,DWORD PTR SS:[EBP+8]
nasm来写可以写成mov eax,dword ptr [ebp + 8]理由:ebp和esp默认是ss段,所以根本不用显式说明. eax,ebx,ecx,edx,edi,esi默认 ...
- rep stos dword ptr es:[edi]
本文链接:https://blog.csdn.net/ypist/article/details/8467163今天读代码时,忽然跳出如下一条指令==>>汇编代码: rep stos dw ...
- CC_STACKPROTECTOR防内核堆栈溢出补丁分析【转】
转自:https://yq.aliyun.com/articles/1723 摘要: 作者:王智通 CC_STACKPROTECT补丁是Tejun Heo在09年给主线kernel提交的一个用来防 ...
- 关于dword ptr 指令
dword 双字 就是四个字节ptr pointer缩写 即指针[]里的数据是一个地址值,这个地址指向一个双字型数据比如mov eax, dword ptr [12345678] 把内存地址12345 ...
- 【原创】uC/OS 中LES BX,DWORD PTR DS:_OSTCBCur的作用及原理
LES BX, DWORD PTR DS:_OSTCBCur ;OSTCBCur->OSTCBStkPtr = SS:SP!!! ], SS ;将当前SS(栈的基地址)寄存器值存放至当前任务控制 ...
- arcgis engine 中出现的内存堆栈溢出问题。
两种解决方案: 1.循环加载mxd文档的时候出现的堆栈溢出,解决办法是每次循环结束时清空FeatureLayer,感觉并不好,但是确实可以实现功能. 2.循环调取featureclass的search ...
- STM32堆栈溢出
在使用STM32读取SD Card的文件时,总是会卡死在读函数那里 res = f_read(&fsrc, gbuffer, sizeof(gbuffer)-1, &br); 而且出现 ...
随机推荐
- Oracle中批量插入
为了防止OracleConnection的重复打开和关闭,使用begin end:将sql语句包在里面,然后一次性执行提高插入的效率. 下面代码中要插入的数据在list集合中,如果list集合的cou ...
- ASP.Net string 类的扩展方法 [转]
string 类的扩展方法列表(基本相同于 IEnumerable<T> 接口的成员列表): Aggregate<> //累加 All<> / ...
- 反射-b
Class pkClass=NSClassFromString(@"PKAddPassesViewController"); if (pkClass) { NS ...
- Tomcat基础教程(三)
Tomcat中的Web应用 Web应用就是具有特定目录结构的目录和文件. 基于JAVA技术开发的Web应用中通常会包含以下的web对象: 静态文件对象:HTML页面,图片,普通文件 Servlet: ...
- node.js使用经验记录
MongoDB使用经验: 有时不知道MongoDB的错误码代表什么,那有这个链接: https://github.com/mongodb/mongo/blob/master/src/mongo/bas ...
- MIUI是小米的核心竞争力
MIUI与众多顶尖的互联网公司合作开发系统功能,题主说的很不完全,当然估计除了MIUI开发组也没人能说的很完整,我试着总结了一下,欢迎补充: 1.云服务:金山云(小米公司持有金山云公司9.87%的股份 ...
- java中利用RandomAccessFile读取超大文件
超大文件我们使用普通的文件读取方式都很慢很卡,在java中为我提供了RandomAccessFile函数,可以快速的读取超大文件并且不会感觉到卡哦,下面看我的一个演示实例. 服务器的日志文件往往达到4 ...
- android 状态栏(StatusBar)
一.SystemUI 概述 自 android2.2 开始 , 原本存在与 framework-res.apk 中的状态栏和下拉通知栏界面控制被分割出一个单独的 apk 文件 , 命名为 System ...
- 十大众筹PC:硅谷新生代如何打造下一代计算机
十大众筹PC:硅谷新生代如何打造下一代计算机 来源:CNET科技资讯网 众筹革命已经让众多吸引人的台式机,笔电和平板PC诞生.下面就是最引人注意和最成功的典范. 尽管PC市场不再象过去那样是一 ...
- poj1797 - Heavy Transportation(最大边,最短路变形spfa)
题目大意: 给你以T, 代表T组测试数据,一个n代表有n个点, 一个m代表有m条边, 每条边有三个参数,a,b,c表示从a到b的这条路上最大的承受重量是c, 让你找出一条线路,要求出在这条线路上的最小 ...