1. 程式人生 > >最近遇到的c++問題及解決彙總

最近遇到的c++問題及解決彙總

1 error BK1506 : cannot open file '.\Debug\????????.sbr': No such file or dire

 

解決方法:

從工程->設定->瀏覽資訊->建立建立瀏覽資訊的複選框的勾給去掉就行了

 

工程---屬性---C/C---Browse Information -----Enable Browse Information  設定為NONE

 

2 在資源檢視中,開啟資原始檔時,跳出Runtime Error     This application has requested the Runtime to terminate it in an unusal way .

 

解決方法:

將工程下的.aps檔案刪除就可以了

 

3 debug下 對話方塊跳出 Release下對話方塊初始後沒有跳出

 

經測試,有一個函式未做呼叫失敗處理,導致下面的陣列索引為負值

 

兩個版本的不同,很多情況是陣列過界等引起的

 

DEBUG版本未做優化    RELEASE版本進行了優化, 若兩者不同,很可能語句不安全引起的。

 

4 ~CCmdTarget()  斷言錯誤

 

[cpp] view plain

 copy

  1. CCmdTarget::~CCmdTarget()   
  2. {   
  3. #ifndef _AFX_NO_OLE_SUPPORT   
  4. if (m_xDispatch.m_vtbl != 0)   
  5. ((COleDispatchImpl*)&m_xDispatch)->Disconnect();   
  6. ASSERT(m_dwRef <= 1); //此處出現斷言錯誤
      
  7. #endif   
  8. #ifdef _AFXDLL   
  9. m_pModuleState = NULL;   
  10. #endif   
  11. }    


但是通過除錯,沒找到問題 ,於是重新編譯了下,就正常了 

遇到稀奇古怪的錯誤時,可以先把工程 重新清理編譯下,看看是否還有問題

 

 

5如何禁用 VS2010 的 vcpkgsrv.exe 執行

VS2010 的 vcpkgsrv.exe(Microsoft Visual C++ Package Server)很煩,會自動運更新,佔用相當大的記憶體(在我的機器中 >150M),而且一般會出現多個,殺掉還會自動出現。其實我們可以很容易禁用它,只要 Disable IntelliSense 即可,位於:
Tools - Options - Text Editor - C/C++ - Advanced - IntelliSense - Disable IntelliSense:True

 

6 資源管理器跑右邊了,重置視窗  也不起作用

 

工具》匯入和匯出設定>重置所有設定>否,僅重置,從而改寫我的當前設定>下一步選擇VisualC++預設設定。完成。

 

7 在解構函式中呼叫KillTimer(1);  引起斷言錯誤

 

[cpp] view plain copy

  1. killtimer函式的原始碼:  
  2.  {  
  3.     ASSERT(::IsWindow(m_hWnd)); //解構函式裡面m_hWnd是無效的,當然assert出錯了。  
  4.     return ::KillTimer(m_hWnd, nIDEvent);  
  5.   }  


改在OnOK()中呼叫

 

 

8 “WriteHuge”: 不是“CFile”的成員 

 

遇到這種情況的解決方法把程式碼中的ReadHuge換成Read、WriteHuge換成Write即可。

原因是VC++2005及後續VC版本中的CFile沒有ReadHuge和WriteHuge成員函式,只在VC6中的CFile才有,不過ReadHuge()函式已被Read()函式代替,WriteHuge()函式已被Write()函式代替

 

資料庫開啟後,再重新開啟後 出現未知錯誤

  經查,竟是DOMODAL 引起的,  將DOMODAL 註釋掉 就沒有問題了,  實在是奇怪

  之好,將資料庫的釋放  改在了整個程式的結束, 而不是程序的結束, 這樣就不需要重新開啟