之前用VC++ 6.0编写程序进行较大规模的数组处理时,经常会遇到栈空间溢出(stack overflow)的问题,有时会弹出WINDOWS的警告,某内存不能read。如果新手想不到错误的原因是因为栈溢出的话,调试起来会非常头痛。
我最近在对文本文件中的100多万行的浮点数进行按大小排序,首先想到的必然是用快速排序算法,快排利用到了递归的方法,递归方法会用到栈这个数据结构。VC++6.0中默认的栈空间大小是1M,我在运行程序时,把结果输出到一个文本文件中,但异常的是,程序并没有向文件中写任何东西。回头检查时,发现程序在递归的过程中出现异常。
首先想到的出错原因是数据量太大,故多只取前三百行进行排序,结果正常输出。然后逐渐增加行数,当增加到70000行时,程序便不能正常输出了。这是典型的栈空间不够用的例子,现将栈空间修改的方法说明。在”工程“菜单中,选择”设置“,然后选择”连接“选项卡,在”分类“下拉菜单中,选择”输出“,然后在”堆栈分配“框中输入一个较大的数目,此框中的数目是按字节计算的,1M约等于1000000字节,然后可根据自己的实际需要相应的修改即可。