C語言里程序編譯無誤但運行會彈出程序已停止運行是為什么?
造成程序停止運行彈框出錯的可能原因如下:
內(nèi)存溢出
內(nèi)存溢出(out of memory)通俗理解就是內(nèi)存不夠,程序所需要的內(nèi)存遠遠超出了主機內(nèi)安裝的內(nèi)存所承受大小,就叫內(nèi)存溢出。系統(tǒng)會提示內(nèi)存溢出,有時候會自動關(guān)閉軟件,重啟電腦或者軟件后釋放掉一部分內(nèi)存又可以正常運行該軟件
造成內(nèi)存溢出的原因可能有:
1>棧區(qū)溢出,例如在main函數(shù)內(nèi)開辟的數(shù)組空間過大,一般機器的棧區(qū)限制在8MB左右,如果開辟的數(shù)組大小超過限制,程序就會崩潰。通常的解決方法是申請堆內(nèi)存,即將較大的數(shù)組作為全局變量開在main函數(shù)之外。
2>錯誤地址訪問,常見的非法訪問包括指針漂移,數(shù)組越界等,初學者也經(jīng)常出現(xiàn)類似scanf函數(shù)沒加區(qū)地址符號&的情況導致在讀取變量的時候因非法訪問造成的溢出。
3>數(shù)據(jù)類型不符,問題和第二個類似,例如在聲明變量時聲明為int在輸出變量時卻用了%lld,就會造成因數(shù)據(jù)類型不符而導致的溢出。
編譯器錯誤
部分編譯器由于所使用的標準不同(例如在一臺機器上使用的可能是C99標準,而另一臺機器上使用的是C11標準),或是因為編譯器鏈接庫的損壞,在少數(shù)情況下也可能導致程序出現(xiàn)不限于崩潰退出的異常錯誤,通常解決方法是到編譯器官方網(wǎng)站下載最新版的IDE安裝。