栈溢出的几种状况

时间:2019-02-03 20:55 来源:365bet滚球网 作者:admin

有几种主要情况会导致堆栈溢出: 首先,局部矩阵太大。 当函数中的矩阵太大时,可能导致堆栈溢出。 例如: Stack.c #includestdio.h #defineSIZE1 * 1024 * 1024 intmain() Intb[size]; 英迪; 对于(i = 0; iSIZE; ++ i){ b[i]= i; 对于(i = 0; iSIZE; ++ i){ Printf(“%d”,b[i]); return0; [root @ localhostMyWorkspace]#ulimit-s1024#设置堆叠大小为1M [root @ localhostMyWorkspace]#。/ stack / dev / null Segmentationfault#stack overflow [root @ localhostMyWorkspace]#ulimit-s10240#设置堆栈大小为10M [root @ localhostMyWorkspace]#。/ stack / dev / null [root @ localhostMyWorkspace]##正常运行 当系统电池设置为较小时,会导致堆栈溢出。 当程序需要一个大矩阵时,它可以设置为静态或全局变量。 其次,递归调用的级别太多了。 递归函数在运行时执行推送操作,当推力的数量太多时,它也会导致堆栈溢出。 以下过程计算1到n的总和。 Add.c #includestdio.h intSum(constunsignedintn) Printf(“nownis%u “,n); 是(0 == n || 1 == n){ Returnn; Returnn + Sum(n-1); intmain() Unsignedintn; Printf(“Inputn:”); Scanf(“%d”,n); Printf(“Thesumof1to%uis%u “,n,Sum(n)); return0;
回到顶部