C语言里程序编译无误但运行会弹出程序已停止运行是为什么?
2017-11-30 17:41
711 查看
C语言里程序编译无误但运行会弹出程序已停止运行是为什么?
原文链接(https://zhidao.baidu.com/question/1178139670043658699.html)摘要
1. 内存溢出
内存溢出(out of memory)通俗理解就是内存不够,程序所需要的内存远远超出了主机内安装的内存所承受大小,就叫内存溢出。系统会提示内存溢出,有时候会自动关闭软件,重启电脑或者软件后释放掉一部分内存又可以正常运行该软件造成内存溢出的原因可能有:
1.1 栈区溢出,例如在main函数内开辟的数组空间过大,一般机器的栈区限制在8MB左右,如果开辟的数组大小超过限制,程序就会崩溃。通常的解决方法是申请堆内存,即将较大的数组作为全局变量开在main函数之外。
1.2 错误地址访问,常见的非法访问包括指针漂移,数组越界等,初学者也经常出现类似scanf函数没加区地址符号&的情况导致在读取变量的时候因非法访问造成的溢出。
1.3 数据类型不符,问题和第二个类似,例如在声明变量时声明为int在输出变量时却用了%ld,就会造成因数据类型不符而导致的溢出。
2. 编译器错误
部分编译器由于所使用的标准不同(例如在一台机器上使用的可能是C99标准,而另一台机器上使用的是C11标准),或是因为编译器链接库的损坏,在少数情况下也可能导致程序出现不限于崩溃退出的异常错误,通常解决方法是到编译器官方网站下载最新版的IDE安装相关文章推荐
- Eclipse 编译运行程序时 弹出 hot code replace failed 窗口
- VS2012编译运行VS2013的程序以及VS中运行C语言
- 我用dev-c++编译的C程序,为什么程序一运行就自动关闭
- 关于 c语言的编译 和编译后程序的运行 分类: 嵌入式开发学习 2011-03-29 19:57 909人阅读 评论(0) 收藏
- 为什么每次运行程序之前,VS都要先编译的解决方法
- 关于 c语言的编译 和编译后程序的运行
- 扫盲回帖系列之3——在windows下编译生成的程序为什么不能在ubuntu下运行呢?
- 【C#】对异步请求处理程序IHttpAsyncHandler的理解和分享一个易用性封装 【手记】走近科学之为什么明明实现了IEnumerable<T>的类型却不能调用LINQ扩展方法 【手记】手机网页弹出层后屏蔽底层的滑动响应 【手记】ASP.NET提示“未能创建类型”处理 【Web】一个非常简单的移动web消息框 【手记】解决EXCEL跑SQL遇“查询无法运行或数据库表无法打开...”
- 为什么在Win7上编译的ADO程序不能在XP上运行
- 【黑马程序员】C语言学习笔记之第一个C程序及编译运行(一)
- 为什么在Win7上编译的ADO程序不能在XP上运行
- win7 上面 gcc 编译的程序 a.exe 运行的时候报错 a.exe 已停止工作, 异常代码:c0000005
- VC新版本编译的程序如何在老系统上运行
- EditPlus编译和运行JAVA程序
- 关于C++编译的程序无法在新一台电脑上运行总结
- 在win7旗舰版64位系统中,qtp破解密钥时,程序运行马上提示已停止工作
- 为什么程序运行的结果,虽然是倒序输出了,但是有输出了一串别的汉字
- vscode编辑器配置C语言编译运行环境
- C语言中内存分布及程序运行中(BSS段、数据段、代码段、堆栈)
- delphi 7.0程序运行关闭最后弹出CPU窗口:ntdll.DbgBreakPoint的解决方法