C程序为什么会崩溃?
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语言-百度百科
绛旓細寤鸿鎶婃暟缁勬敼灏忕偣
绛旓細銆1銆戜竴杩愯灏宕╂簝鐨勫師鍥狅細main鍑芥暟涓殑BiTree T; 杩欎釜鎸囬拡T鎸囧悜浜嗘湭鐭ョ殑浣嶇疆锛屽苟闈炵┖鎸囬拡锛屽綋create_BST鍑芥暟璋冪敤Insert_BST鍑芥暟锛屼笉浼氳繘鍏 if (T==NULL){T=q;//p=T;} 鑰屾槸杩涘叆璇彞p=T; p鏄垰鐢宠浜嗗唴瀛樼殑鎸囬拡锛岀幇鍦ㄥ張鎶婁竴涓寚鍚戞湭鐭ュ尯鍩熺殑鎸囬拡鍦板潃璧嬪肩粰瀹冿紝浣垮畠鍐嶆搷浣滃乏鍙冲瓙鏍戞椂鍙堟寚鍚...
绛旓細姝g‘鐨勭敤娉曟槸锛岀紪璇戞垚.exe鏂囦欢鍚庯紝鍦―OS绐楀彛涓繘鍏ヨ繖涓.exe鏂囦欢鎵鍦ㄧ洰褰曪紝鐒跺悗杈撳叆鈥滆繖涓.exe鏂囦欢鍚 杈撳叆鏂囦欢鍚嶅瓧 杈撳嚭鏂囦欢鍚 鍥炶溅鈥濇墠琛屻傛瘮濡傛垜缂栬瘧濂界殑鏂囦欢鍚嶆槸1.exe锛岃緭鍏ユ枃浠跺悕鏄痠nput.txt锛屽噯澶囪緭鍑虹殑鏂囦欢鍙玱ut.txt锛岄偅涔堝氨涓浼氬穿婧浜嗭紝濡傚浘 瑕侀伩鍏嶆病鏈夎緭鍏ュ弬鏁板穿婧冪殑鎯呭喌锛屽彲浠ュ湪绋嬪簭涓繘琛屾枃浠...
绛旓細鏍煎紡瀛楃涓蹭负%s鏃讹紝鍚庨潰鐨勫弬鏁板簲璇ヤ负涓涓唴瀛樺湴鍧(鎸囬拡)锛屽鏋滅粰鍑虹殑鏄竴涓瓧绗﹀彉閲忥紝閭d箞浼氬皢瀛楃鍙橀噺涓殑鍊艰浣滃湴鍧锛屼緥濡傚瓧绗﹀彉閲廲h涓繚瀛樼殑鏄瓧绗'a'锛岄偅涔坧rintf浼氬皢'a'瀵瑰簲鐨凙SCII鐮97浣滀负鍐呭瓨鍦板潃锛岃瘯鍥捐浆鍒拌浣嶇疆璇诲嚭鏁版嵁锛涜岃浣嶇疆鐨勫唴瀛樼┖闂村睘浜庢搷浣滅郴缁燂紝涓轰繚鎶ゆ绌洪棿涓嶅彲璁块棶锛屽洜鑰绋嬪簭宕╂簝...
绛旓細浣犲ソ锛屾垜鐢╒S璇曡繃浜嗭紝娌℃湁浠讳綍闂 鎵浠ュ簲璇ユ槸浣犵紪璇戝櫒鐨勯棶棰橈紝鎹竴涓紪璇戝櫒鎴栭噸鏂颁笅杞借瘯璇晘
绛旓細{ p_contemp = ( int * ) malloc ( 5 * sizeof ( int ) )姝ゅ涓篺or寰幆鎺у埗璇彞渚濇缁欐暟缁勪緷娆¤緭鍏5涓暟 } 浣犳渶鍒濈殑浠g爜锛宻 ( int * p_c )涓紝浣犵敤malloc 鍒嗛厤浜5涓猧nt鐨勭┖闂达紝鎶婃绌洪棿鐨勫湴鍧璧嬬粰浜唒_contemp锛岃屾病鏈夎祴缁欐寚閽坧_c锛屾墍浠_c鎸囧悜绌猴紝鍦╩ain()涓皟鐢╝ . h_p 浼...
绛旓細涓昏闂搴旇鏄繛鎺ュ悗鐨勫瓧绗︿覆瓒呰繃浜嗘暟缁勭殑瀹氫箟锛岄犳垚绋嬪簭杩愯缁撴灉鐨勪笉纭畾銆傜敤char a[100]="heheuuu";杩欐牱鐨勫畾涔夛紝鍙槻姝㈠悎骞跺悗闀垮害鍦99浠ュ唴鐨勬儏鍐靛嚭鐜版绫婚敊璇
绛旓細閿欒鍘熷洜锛屾寚閽坆娌℃湁璧嬩簣鍒濆硷紝b鎸囧悜鍝噷浜嗭紵浠栨槸涓涓噹鎸囬拡銆傛妸瀹冧綔涓哄嚱鏁扮殑瀹炲弬浼犻掔粰鍑芥暟real鏄湁闂銆
绛旓細鎵浠ュ湪鎵цfor(;s1[i]!='\0';i++){}鏃讹紝鐢变簬i寰堝ぇ锛岃秴杩囦簡str1[80]鐨勯暱搴︼紝鎵浠ュ鑷磋闂紓甯搞傛敼涓猴細int i=0,j=0;灏卞彲浠ヤ簡銆備笉杩囪繖娈绋嬪簭杩樻湁闂锛屽氨鏄鏋渟tr1鐨勯暱搴﹀拰str2鐨勯暱搴︿箣鍜屽ぇ浜巗tr1[80]瀹氫箟鐨80涓瓧鑺傦紝褰撴嫾鎺ュ瓧绗︿覆瓒呰繃80涓瓧鑺傛椂锛屼篃浼氬嚭鐜拌闂紓甯搞傛墍浠ワ紝鍦╳hile璇彞 ...
绛旓細鎸夊间紶閫掔殑鍙傛暟鏄笉鑳戒慨鏀圭殑锛岀畝鍗曡灏辨槸浣犲湪getmemory閲屼慨鏀圭殑p锛屽叾瀹炲苟涓嶄細褰卞搷鍒癿ain鍑芥暟閲岀殑str鍙橀噺锛屾墍浠ヤ綘鐨剆tr涓鐩撮兘鏄疦ULL getmemory浣犲彲浠ュ仛鎴愯繑鍥炲兼潵杩斿洖杩欎釜鎸囬拡鍛锛屼緥濡 char* getmemory(){ ...} int main(){ ...char *str = NULL;str = getmemory();} ...