今天调试程序的时候,发现一个奇怪的问题,之前调试都没问题的,今早加了一点东西,就出现错误,跳到调试位置,如下4行红色部分
1 ; Find next lower page and probe 2 cs20: 3 sub eax, _PAGESIZE_ ; decrease by PAGESIZE 4 test dword ptr [eax],eax ; probe page. 5 jmp short cs10 6 7 _chkstk endp 8 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<LXY,&LXY> LxyData;
要么就是扩大栈空间的大小。
扩大空间堆栈大小的方法是
Project->Properties->Configuarations Properties->Linker->System->Stact Reserve Size
例如修改成5M,可以输入5242880
1024*1024*5 = 5242880
这样修改后程序就可以正常运行了。
俩儿子
时间: 2024-12-20 09:29:45