错误记录之内存溢出
2014-05-07 00:00
423 查看
今天的一个问题的记录:
主要目的是求完全数,问题出在static那行,如果去除static那么程序会崩溃,加上则不会!
主要原因是局部变量分配在栈上,而恰巧定义数组的大小出现了问题导致内存溢出覆盖了main函数的返回地址,所以导致错误,加了static之后由于数组的分配内存的地址发生变化不是在栈上,所以解决了问题。或者把数组大小改为30则可以解决,因为程序运行期间数组最大能达到30.
#include<stdio.h> int main() { // static int arr[10]={0,}; //static在这一行!!!!!!!! int arr[10]={0,}; //static在这一行!!!!!!!! int i,val,index,total; int max = -1; for( val = 2 ; val < 1000 ; val++ ) { index = -1; total = val; for(i=1;i<val;i++) { if((val%i)==0) { index++; if( index > max ) max = index; if( index > 9 ) { printf("i=%d,val=%d,index=%d,total=%d\n",i,val,index,total); } total=total-i; arr[index]=i; } } if(total==0) { printf("%d is good!",val); for(i=0;i<index;i++) printf("%d,",arr[i]); printf("%d\n",arr[index]); } } printf("fuck %d!\n",max); return 0; }
主要目的是求完全数,问题出在static那行,如果去除static那么程序会崩溃,加上则不会!
主要原因是局部变量分配在栈上,而恰巧定义数组的大小出现了问题导致内存溢出覆盖了main函数的返回地址,所以导致错误,加了static之后由于数组的分配内存的地址发生变化不是在栈上,所以解决了问题。或者把数组大小改为30则可以解决,因为程序运行期间数组最大能达到30.
相关文章推荐
- tomcat 内存溢出错误记录
- Android 7.1编译到33%时出现JDK内存溢出的错误:
- Eclipse中通过Tomcat运行JavaWeb项目发生内存溢出:java.lang.OutOfMemoryError: PermGen space 错误的解决方案
- 启动tomcat出现内存溢出错误 java.lang.OutOfMemoryError: PermGen space
- eclipse启动tomcat出现内存溢出错误 java.lang.OutOfMemoryError: PermGen space
- asp access iis 内存溢出错误
- eclipse启动tomcat出现内存溢出错误 java.lang.OutOfMemoryError: PermGen space
- Tomcat7.057绿色版安装成windows服务,运行时发生内存溢出错误的解决方法
- 绿色版tomcat 放到windows服务里,运行时发生内存溢出错误的解决方法
- domino服务器,邮件附加附件的时候提示内存溢出或者错误的解决方法
- eclipse内存溢出错误
- OOM分析——错误使用Servlet API导致内存溢出
- c++调试记录--内存无法访问以及逻辑正确却总是得到错误结果
- C#程序出现内存溢出错误的解决办法
- java.lang.OutOfMemoryError: Java heap space 内存溢出错误及处理办法(转)
- eclipse启动tomcat出现内存溢出错误 java.lang.OutOfMemoryError: PermGen space
- eclipse启动tomcat出现内存溢出错误 java.lang.OutOfMemoryError: PermGen space
- 记录openssl asn1编解码开发遇到的内存错误问题 SIGSEGV
- php扩展开发笔记(7) 错误使用 php_base64_decode 导致内存溢出
- tomcat服务器内存溢出错误:OutOfMemoryError: PermGen space