星研軟體自動停止編譯
❶ 為什麼編譯正確的c++程序在運行時會停止工作
編譯只是保證沒有語法錯誤,但是不能保證你的程序的演算法沒有錯誤,如果你的程序中有比較嚴重的Bug,如果說訪問了系統保護的內存,出於保護,windows會中止你的程序,或是拋出一個異常,如果異常沒有被捕獲並加以處理,程序也會中止,當然,這時你也有機會用調試工具去debug。這種運行期的錯誤是需要程序員去調試排除的。
❷ 求助,為什麼我這編譯無錯,一運行就停止工作
關於用戶編寫的源程序的編譯問題,這是一個很復雜的問題。因為編譯錯誤有很多種。例如:語法錯誤、系統庫連接錯誤、語義錯誤、數組越界、或者內存越界等等。
通常語法錯誤是最好解決的,因為源程序的語法錯了,連編譯都通不過,並且會告訴你在哪一行出錯了。最難調試的就是:程序雖然編譯通過了,但是程序的運行結果是錯誤的,這種是最難調試的。根據你所描述的情況,有可能是你的數組、或者是內存在使用過程中越界,所以導致一運行程序就停止工作。你再仔細檢查一下你的源程序。
❸ c語言程序出現exe停止工作是什麼原因
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))。runtimeerror(運行時錯誤)就是程序運行到一半,程序就崩潰了。
(3)星研軟體自動停止編譯擴展閱讀:
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語言里程序編譯無誤但運行會彈出程序已停止運行是為什麼
造成程序停止運行彈框出錯的可能原因如下:
內存溢出
內存溢出(out of memory)通俗理解就是內存不夠,程序所需要的內存遠遠超出了主機內安裝的內存所承受大小,就叫內存溢出。系統會提示內存溢出,有時候會自動關閉軟體,重啟電腦或者軟體後釋放掉一部分內存又可以正常運行該軟體
造成內存溢出的原因可能有:
1>棧區溢出,例如在main函數內開辟的數組空間過大,一般機器的棧區限制在8MB左右,如果開辟的數組大小超過限制,程序就會崩潰。通常的解決方法是申請堆內存,即將較大的數組作為全局變數開在main函數之外。
2>錯誤地址訪問,常見的非法訪問包括指針漂移,數組越界等,初學者也經常出現類似scanf函數沒加區地址符號&的情況導致在讀取變數的時候因非法訪問造成的溢出。
3>數據類型不符,問題和第二個類似,例如在聲明變數時聲明為int在輸出變數時卻用了%lld,就會造成因數據類型不符而導致的溢出。
編譯器錯誤
部分編譯器由於所使用的標准不同(例如在一台機器上使用的可能是C99標准,而另一台機器上使用的是C11標准),或是因為編譯器鏈接庫的損壞,在少數情況下也可能導致程序出現不限於崩潰退出的異常錯誤,通常解決方法是到編譯器官方網站下載最新版的IDE安裝。