为什么C语言运行到一半就会弹出一个error?
C语言程序运行出现exe停止工作的原因是因为内存溢出和编译器错误。
第一种:内存溢出
内存溢出(out of memory)通俗理解就是内存不够,程序所需要的内存远远超出了主机内安装的内存所承受大小,就叫内存溢出。系统会提示内存溢出,有时候会自动关闭软件,重启电脑或者软件后释放掉一部分内存又可以正常运行该软件。
第二种:编译器错误
部分编译器由于所使用的标准不同(例如在一台机器上使用的可能是C99标准,而另一台机器上使用的是C11标准),或是因为编译器链接库的损坏,在少数情况下也可能导致程序出现不限于崩溃退出的异常错误,通常解决方法是到编译器官方网站下载最新版的IDE安装。
举例说明:
1、除以零。
2、数组越界:int a[3]; a[10000000]=10。
3、指针越界:int * p; p=(int *)malloc(5 * sizeof(int)); *(p+1000000)=10。
4、使用已经释放的空间:int * p; p=(int *)malloc(5 * sizeof(int));free(p); *p=10。
5、数组开得太大,超出了栈的范围,造成栈溢出:int a[100000000],没有开辟内存 List L=(List)malloc(sizeof(struct LNode))。runtime error (运行时错误)就是程序运行到一半,程序就崩溃了。
扩展资料:
C特有特点:
1、C语言是一个有结构化程序设计、具有变量作用域(variable scope)以及递归功能的过程式语言。
2、C语言传递参数均是以值传递(pass by value),另外也可以传递指针(a pointer passed by value)。
3、不同的变量类型可以用结构体(struct)组合在一起。
4、只有32个保留字(reserved keywords),使变量、函数命名有更多弹性。
5、部份的变量类型可以转换,例如整型和字符型变量。
6、通过指针(pointer),C语言可以容易的对存储器进行低级控制。
7、预编译处理(preprocessor)让C语言的编译更具有弹性。
参考资料:C语言-百度百科
何枯叔3475 :答:编译器错误 部分编译器由于所使用的标准不同(例如在一台机器上使用的可能是C99标准,而另一台机器上使用的是C11标准),或是因为编译器链接库的损坏,在少数情况下也可能导致程序出现不限于崩溃退出的异常错误,通常解决方法是到编译器官方网站下载最新版的IDE安装。
何枯叔3475 :答:system("pause");会调用系统的pause函数,提示并实现按任意键退出程序效果。如果是已经编译好的C语言程序,可以通过开始->运行,键入cmd后回车。在打开的命令行窗口,将可执行文件拖动到窗口上,再回车即可运行该程序,在此窗口不会出现闪退,从而观察运行结果。由于该问题仅在windows平台出现,所以以上介绍...
何枯叔3475 :答:大概问题,我已经知道了,所谓的执行到一半就终止,是因为数组越界了,而且编译器不会报警。比如,在你这个程序里,我输出50-200,他永远只会提示你有21个,因为你输出之前,还需要把这个偶数存放到一维数组a中,然而一维数组只能存放20个数,50-200中间有76个偶数,到了第20个偶数的时候,数组就已经...
何枯叔3475 :答:可能你在操作文件时候有错误。一般需要判断打开的文件是否为null,才能继续进行fscanf的操作
何枯叔3475 :答:1.木马病毒造成常用病毒捆绑应用程序和系统文件,然后安全杀毒软件把有木马病毒应用程序和系统文件查杀导致。2.应用程序组件丢失,应用程序完整的运行需要一些系统文件或者某些ll文件支持的,如果应用程序组件不完整也会导致的。3.系统文件损坏或丢失,盗版系统或Ghost版本系统,很容易出现该问题。4.操作系统自身...
何枯叔3475 :答:windows系统提供了API可以弹出别的窗口 比如对话框dialog系列API函数 或者messagebox函数
何枯叔3475 :答:这种情况叫做 runtime error (运行时错误)。在 Windows 7 上这样提示:在 Windows XP 上这样提示:runtime error (运行时错误)就是程序运行到一半,程序就崩溃了。比如说:①除以零 ②数组越界:int a[3]; a[10000000]=10;③指针越界:int * p; p=(int *)malloc(5 * sizeof(int));...
何枯叔3475 :答:从文件读取字符时;放入的文件描述符参数为空;int __cdecl fscanf (FILE *stream,const char *format,...);这个是函数原型; stream 参数为空;按照你的描述你是想从控制台或内存缓冲中读取; 所以应该用 scanf 或者 sscanf ; 不应该用fscanf 这个函数的作用是从文件中读取固定格式的字符;...
何枯叔3475 :答:程序中根本没有这几句的内容,因而不会出错。有了语句,就不能省略了,就出错了。就是这样简单。另外,你的程序必须当做C++程序编译,否则通不过。C不允许在有实质语句之后定义变量,变量说明要全部放到相应段的最前面,也不支持//注释。我是用DEVC++编译成功的,用WINTC编译失败。
何枯叔3475 :答:是否存在内存泄露?若是,则前几次运行正常,但运行几次后就会出错了。