標籤:
Visual Studio ErrorDebug Error 錯誤類型#0表示呼叫慣例錯誤
可以考慮在指標前面加上_stdcall。Dll庫更新了,exe未更新也會報此錯誤。
#2表示棧溢出
-S是Stack around the variable … was corrupted的縮寫
把12個浮點數數分配給整數數組的時候遇到了這個錯誤。錯誤一般都是指數組越界。
Stack around the variable … was corrupted的意思就是棧溢出。
可以看到,j小於12來做條件的時候,數組發生了棧溢出。原因是我定義的數組只有11個位置,如果j達到11的時候array[11]是不存在的,然而這種情況不同於未初始化的變數因為記憶體中數組只不過是一個位置與後面固定的長度,vs2015不會探測後方的記憶體是否在數組範圍之內。導致的結果就是發生debug error#2錯誤。
#3表示使用了未初始化的變數
-T是The variable … is being used without being initialized的縮寫
-T是The variable … is being used without being initialized的縮寫。在switch case(或其他情況),case後方忘了break;就會出現#3報錯。很明顯day=31後面忘了break; 英文提示:the variable is being used without being defined(initialized)說的就是變數未定義,初始化的意思。
switch-case在記憶體中的運算方法和if-else是相同的。但是對於switch-case來說系統執行單減迴圈直至為零.
安裝Visual Studio時登入等不上去的方法
- 退了360!退了360!退了360!
- 重新啟動電腦
- 重新開啟安裝程式
- 把DNS修改為主選:114.114.114.114備選:8.8.8.8(參見360DNS優選)
分支條件沒覆蓋,不是所有分支都有傳回值
什麼叫分支條件沒覆蓋呢?比如if-else,兩選一,肯定覆蓋。比如if-else if,如果兩個條件沒滿足,還有第三種可能,如果這種可能性處沒有return,就認為沒完全覆蓋。
系統會預設後方還有一個空的else,然而這個else並沒有return值。所以出現了C4715錯誤
項目載入失敗。提示:該項目需要使用者手動輸入。
解決方案:
刪除了原來的項目和檔案夾,建立新的目錄,問題即可解除
無法開啟……進行寫入
這其實是因為上一次啟動並執行時候沒有關閉,把上一個視窗關了,重新運行就沒問題了
HANDLE hout的問題
為什麼gotoxy函數沒起作用?
事實上,HANDLE就是HANDLE的類型,中的HANDLE hout在main函數中相當於從新聲明了hout,這樣的話,hout對於main()來說就是局部變數。根據函數中局部變數會直接屏蔽全域變數的原則,這個賦值是對局部變數來說的。而gotoxy函數調用的是全域變數,此時全域變數是空的,因此gotoxy函數不會生效。
解決方案:
按照正常的賦值方法,這樣全域變數hout就被正常的賦值了,可以看到此時gotoxy函數已經發揮了作用。這樣一來又省去了把所有函數都加上HANDLE hout參數的麻煩。
warning MSB8028: The intermediate directory……
這個問題,和代碼沒有關係。原因在於重複建立了兩個project指向了一個目錄。
解決方案:
把需要的cpp拷貝出來,然後把這個項目刪了(連檔案夾都刪掉)然後重建立立一個項目。再把cpp拷貝回去(雖然可以不拷貝,但是為了穩定,建議放在原檔案夾。)再次運行,錯誤消失。
fatal error C1301: error accessing program database D:\Document\CPP_subject\School_asignments\Sudoku\Release\7-b6.ipdb, invalid format, please delete and rebuild
將模式改成x64,或者刪除錯誤的檔案
查錯方法如何判斷數組越界?
現在故意犯了個錯誤,讓最大為12的數組迴圈到30
程式崩潰,三號錯誤,表示數組越界。哪裡越界?重新調試,但是這次只按F5。
偵錯工具警示,下方表明了錯誤位置。
點擊中斷,查看詳細情況。
右側明確的報出了出錯的行數,而左側則告知了異常位置,連記憶體位址都提供了出來。很明顯i變成了隨機數,month數組越界了。
說明一下,偵錯模式只會報出程式在哪一行終端,有時候錯誤的原因可能存在於其他位置,這個時候就要整理一下程式的思路沿著邏輯線索仔細尋找。
還有一點說明。修改之後如果還報同樣的錯誤,有可能是上一次的小黑窗沒關
外部檔案的函數如何查錯?
遵循原則,返回什麼,列印什麼。
如果都是0,無法確定是那個0,就加幾個自己認識的數字,就能快速區分出哪一個出的錯。
Gotoxy函數失效?
Gotoxy函數無論如何也無法移動到指定位置,但是這一行的確執行了,原因是什麼?
這一行的確是執行了,原因在於gotoxy函數的目標地點超出了控制台視窗的大小,這個時候此函數執行失敗,系統自動繼續讀取。
迴圈次數超過預期導致顯示混亂
類似於控制台列印時發生不可預知的錯誤,列印超過邊界倒置自動換行出現混亂的形況,可以採用_getch()+列印迴圈次數的方法
採用類似方法可以把迴圈次數列印出來以及知道第幾次迴圈出現了錯誤
這樣一來隨著每一步列印,都會出現類似於腳註的行列迴圈次數信。
使用不同的資料多次測試應用程式
對於同一個程式需要輸入多組不同的資料進行測試的情況,可以考慮在程式開頭和結束加入清屏和goto(或while(!))語句。
while(!){
……
}
System不明確
某處輸入system(“pause”);後其他所有cout均會提示cout不明確
此時運行程式,不會提示任何錯誤
但是報錯依舊存在
解決方案:
在標頭檔處包含#include<cstdlib>
問題得到解決
原本正常的控制台介面列印顏色出現排版混亂
錯誤的原因是因為控制台介面下方的中文IME幹擾了列印過程。
解決方案:
- 在進入正式列印結果的介面之前按shift(或其他按鍵)切換至英文IME
- 規劃視窗時為IME預留一行空白,但不夠美觀
有空再配圖
Visual Studio Error