天天看點

VS2013 BUG合集一、生成解決方案出錯(編譯出錯)二、編譯沒問題,調試有問題7. Expression: (“Buffer too small”,0)8. Expression: vector subscript out of range

VS2013 BUG合集

  • 一、生成解決方案出錯(編譯出錯)
    • 1. 找不到lib檔案
    • 2. x64和x86沖突
    • 3. error LINK2019 無法解析外部符号
    • 4. 無法查找或打開PDB檔案
      • 什麼是PDB檔案
      • 解決
    • 5. 丢失opencv_world300.dll
    • 6. error 1104
      • 打不開各種.lib檔案
      • 無法打開所在工程的exe檔案
    • 7. error LINK1169:找到一個或多個多重定義的符号
    • 8. error LINK2005:已定義,重複定義
    • 9. error C1083:無法打開包括檔案: “Eigen/Dense”
    • 10. error C1083: 無法打開包括檔案:“opencv2/nonfree/nonfree.hpp”: No such file or directory
    • 11. error C1083 無法打開包括檔案: “boost/shared_ptr.hpp”: No such file or directory
    • 12. (第一個vs的qt工程報錯)編譯時常報:error LNK1117 : 選項“SUBSYSTEM:[email protected][email protected]”
    • 13. (第一個vs的qt工程報錯)This application failed to start because it could not find or load the Qt platforms plugins
    • 14. 無法打開源檔案,找不到Qt裡面的庫,程式有好多紅色的波浪線
    • 15. 檢測到RuntimeLibrary的不比對項,值“MTd_StaticDebug"不比對
    • 16. 未加載opencv_core2413.pdb
    • 17. error C4996: -D_SCL_SECURE_NO_WARNINGS
    • 18. error:C4996 ×× is deprecated, please use the ×× function instead.
    • 19. error MSB8031: Building an MFC project for a non-Unicode character set is deprecated.
    • 20. error C2056:"M_PI"未聲明的辨別符
    • 21. error LNK1561: 必須定義入口點
    • 22.
    • 23. error C4996: 'pcl::visualization::PCLVisualizer::addCoordinateSystem': addCoordinateSystem (scale, x, y, z, viewport) is deprecated, please use function addCoordinateSystem (scale, x, y, z, id, viewport) with id a unique string identifier.
    • 24. error C2338: OBJECT_ALLOCATED_ON_STACK_IS_TOO_BIG
  • 二、編譯沒問題,調試有問題
    • 1. opencv_world300.dll 處有未經處理的異常
    • 2. 有未經處理異常
    • 3. 未加載wntdll.pdb
    • 4. 無法找到“test_vtk.exe”調試資訊,或者調試資訊不比對。未使用調試資訊生成二級制檔案。是否繼續調試?
    • 5. 應用程式無法正常啟動(0xc000007b)(未解決!!!)
    • 6. Debug Assertion Failed!
      • Expression: _pFirstBlock == pHead
      • Expression: invalid null pointer
  • 7. Expression: ("Buffer too small",0)
  • 8. Expression: vector subscript out of range
    • 9. Error: no override found for 'vtkPolyDataMapper'.
    • 10. Assertion failed: point_representation_->isValid (point) && "Invalid (NaN, Inf) point coordinates given to nearestKSearch!"
    • 11. [pcl::registration::CorrespondenceEstimation::setInputTarget] Invalid or empty point cloud dataset given!

一、生成解決方案出錯(編譯出錯)

1. 找不到lib檔案

原因:配置問題(看看環境變量,VS配置有沒有全)

2. x64和x86沖突

一般是庫檔案和編譯環境不比對(就是把适用于win32環境的庫用在了x64環境上)

解決:重新編譯一遍庫

3. error LINK2019 無法解析外部符号

原因:

  • 一般是配置裡沒有包含相應的頭檔案,可以根據錯誤提示的名字查找它在哪個檔案夾,然後加上相應的庫檔案。

    例:opencv_contrib-3.0.0(opencv3.0對應的版本)(x64編譯配置)+VS2013+cmake

  • 也有可能是庫檔案版本不對,32位的庫檔案用在64位的編譯環境,這個時候就需要重新編譯配置庫。

    Boost庫安裝及VS2013配置

    VS2013 BUG合集一、生成解決方案出錯(編譯出錯)二、編譯沒問題,調試有問題7. Expression: (“Buffer too small”,0)8. Expression: vector subscript out of range
    這個就是重新編譯配置了一遍64位的boost庫才解決。

4. 無法查找或打開PDB檔案

VS2013 BUG合集一、生成解決方案出錯(編譯出錯)二、編譯沒問題,調試有問題7. Expression: (“Buffer too small”,0)8. Expression: vector subscript out of range

出現這種提示并不是代碼寫錯了,而是編譯器設定的問題,改一下設定就 OK 了。

參考:VS“無法查找或打開PDB檔案”是怎麼回事?如何解決

什麼是PDB檔案

當程式在 VS 上編譯時,程式所依賴的所有動态連結庫(dll 檔案)也會被編譯,編譯過程中每個 dll 都會産生一個pdb檔案,又稱為“符号檔案”,是一個存儲資料的資訊檔案,其包含 dll 庫在編譯過程的某些調試資訊,例如程式中所用到的全局變量、局部變量、函數名以及他們的入口位址等。

pdb 檔案主要用于調試程式,多用于當VS中有多個項目,且項目之間互有依賴關系時,使用pdb檔案調試程式,往往會事半功倍,初學者一般不會用到。

當使用VS 調試程式時,會預設加載你的程式以及程式依賴的dll庫産生的所有pdb檔案,但是結果往往是VS自己找不到依賴庫的pdb檔案,于是就提示給你“無法查找或打開pdb檔案”。

解決

我們可以通過對 VS 做适當的設定,使之能夠查找到相應的 PDB 檔案,具體步驟如下(這裡我們以 VS2017 為例進行說明,其它版本的 VS 操作步驟也一樣)。

  1. 選擇菜單欄中的“調試 --> 選項”,如下圖所示:
    VS2013 BUG合集一、生成解決方案出錯(編譯出錯)二、編譯沒問題,調試有問題7. Expression: (“Buffer too small”,0)8. Expression: vector subscript out of range
  2. 彈出“選項”對話框後,選擇“調試 --> 正常”,在右側選項欄中勾選“啟用源伺服器支援”(包含的 3 個子選項不用勾選),此時會彈出一個安全警報框,選擇“是”即可,如下圖所示:
    VS2013 BUG合集一、生成解決方案出錯(編譯出錯)二、編譯沒問題,調試有問題7. Expression: (“Buffer too small”,0)8. Expression: vector subscript out of range
  3. 還是在“選項”對話框中,選擇“調試 --> 符号”,在右側選項欄中勾選“Microsoft符号伺服器”,此時會彈出一個提示對話框,點選“确定”即可。同時,對于緩存符号的目錄,選擇圖示中的目錄即可
    VS2013 BUG合集一、生成解決方案出錯(編譯出錯)二、編譯沒問題,調試有問題7. Expression: (“Buffer too small”,0)8. Expression: vector subscript out of range
  4. 确定之後,重新運作你的程式,首次運作時,由于編譯器會加載所有動态連結庫的pdb檔案,可能會等到幾秒鐘。程式運作後,之前輸出視窗中的“無法查找或打開pdb檔案”的提示不見了,如下圖所示:
    VS2013 BUG合集一、生成解決方案出錯(編譯出錯)二、編譯沒問題,調試有問題7. Expression: (“Buffer too small”,0)8. Expression: vector subscript out of range

    如上圖所示,由于pdb檔案,又名“符号檔案”,是以“已加載符号”,也就是成功加載了動态連結庫對應的pdb檔案。

    第一次加載會從伺服器下載下傳,如果電腦組態低的話加載會非常卡。一次加載完後可取消掉加載,不影響後續使用。

5. 丢失opencv_world300.dll

解決:将……\opencv\opencv\build\x86\vc12\bin下的3個.dll檔案複制到C:\Windows\SysWOW64下

6. error 1104

打不開各種.lib檔案

原因:編譯器沒有找到你的lib檔案,配置進去就好

例:在VS2013運作obtain_data(用Kinect2.0相機拍照片)調試遇到的問題

無法打開所在工程的exe檔案

錯誤 4 error LNK1104: 無法打開檔案“E:\Program\Project\2_boundaryestimation_ICP\me\rotation_boundaryestimation_icp\Debug\rotation_boundaryestimation_icp.exe”

解決:這種情況一般 就是上一次調試打開的exe檔案沒關閉,關掉重新調試就行了。如果關掉了還有這個提示,就把工程都關了重新打開調試就行了。

7. error LINK1169:找到一個或多個多重定義的符号

原因:問題出現的原因,是因為一個變量在一個頭檔案聲明,但是卻在2個及以上的.cpp檔案中定義。或者有兩個cpp檔案都有mian。(後面這個我比較常見,因為經常會在一個工程裡測試好幾個程式)

解決:一般編譯器會告訴你是哪個變量出現問題,你需要定位到那個變量,然後,删除其中一個多餘的變量定義

還有一種無奈的解決方法,你打開項目-》配置屬性-》連接配接器-》指令行,輸入以下字元串,以允許多重定:

**/force:multiple

參考:error LNK1169: 找到一個或多個多重定義的符号

8. error LINK2005:已定義,重複定義

原因:可能是因為配置庫有重複的地方,比如boost在pcl裡有配置過,後來自己編譯的又配置了一遍

9. error C1083:無法打開包括檔案: “Eigen/Dense”

原因:缺少eigen這個庫,不太懂為啥,本來pcl第三方庫裡有的

解決:參考:(轉載)無法打開 Eigen/Dense 等檔案

1、下載下傳Eigen,并解壓。

1)CSDN:http://download.csdn.net/download/airaybaiju/10237226

2)官網:http://eigen.tuxfamily.org/index.php?title=Main_Page#Download

VS2013 BUG合集一、生成解決方案出錯(編譯出錯)二、編譯沒問題,調試有問題7. Expression: (“Buffer too small”,0)8. Expression: vector subscript out of range

2、解壓之後的檔案夾,重命名為 eigen3 。

3、在項目屬性-> 配置屬性-> vc++目錄-> 包含目錄,

比如我的eigen3在F:\Eigen install pack\eigen3,包含目錄就是:F:\Eigen install pack\eigen3;

10. error C1083: 無法打開包括檔案:“opencv2/nonfree/nonfree.hpp”: No such file or directory

原因:這個目錄下根本沒有nonfree.hpp這個檔案。原因是OpenCV3.0更新了,一些包變成額外的,需要自己安裝。

opencv從2.x到3.x是一個很大的轉變,對于很多功能不完善、性能不穩定的子產品,都被方法了extra_modules(擴充子產品)裡面了。這樣倒是穩定了,但是對于我這樣的新手,要添加這些擴充子產品卻是相當的痛苦啊!!因為要用到sift/surf算法,但是3.0以後這些算法都放到了在xfeacture子產品中,并不在主子產品中,于是我就開始了艱難的配置過程。

—— 來自https://blog.csdn.net/zy499/article/details/82952229

解決:

  1. 安裝配置opencv_contrib

    操作見:

    opencv_contrib-3.0.0(opencv3.0對應的版本)(win32編譯配置)+VS2013+cmake

    opencv_contrib-3.0.0(opencv3.0對應的版本)(x64編譯配置)+VS2013+cmake

  2. 裝好了之後把#include <opencv2/highgui/highgui.hpp> ,也改成了這個檔案正确的路徑,結果還是沒用!

    一氣之下我就在我新裝的庫opencv_contrib-3.0.0下面找到這個檔案nonfree.hpp直接把這個檔案複制到opencv原來的那個庫目錄下,然後把#include <opencv2/highgui/highgui.hpp> 路徑改掉就好了。

11. error C1083 無法打開包括檔案: “boost/shared_ptr.hpp”: No such file or directory

原因:配置問題,這裡應該是F:\PCL1.8.0\3rdParty\Boost\include\boost-1_59

VS2013 BUG合集一、生成解決方案出錯(編譯出錯)二、編譯沒問題,調試有問題7. Expression: (“Buffer too small”,0)8. Expression: vector subscript out of range

參考:“錯誤 C1083 無法打開包括檔案: “boost/shared_ptr.hpp”: No such file or directory”解決辦法

12. (第一個vs的qt工程報錯)編譯時常報:error LNK1117 : 選項“SUBSYSTEM:[email protected][email protected]”

參考:LINK:fatal error LNK1117:選項"SUBSYSTEM:[email protected][email protected]"中的文法錯誤解決辦法

VS2013 BUG合集一、生成解決方案出錯(編譯出錯)二、編譯沒問題,調試有問題7. Expression: (“Buffer too small”,0)8. Expression: vector subscript out of range

解決:項目配置屬性”=>“連結器”=>“指令行”,将右側“其他選項”中的 /SUBSYSTEM:WINDOWS%40QMAKE_SUBSYSTEM_SUFFIX%40 删除

VS2013 BUG合集一、生成解決方案出錯(編譯出錯)二、編譯沒問題,調試有問題7. Expression: (“Buffer too small”,0)8. Expression: vector subscript out of range

13. (第一個vs的qt工程報錯)This application failed to start because it could not find or load the Qt platforms plugins

編譯好的exe可執行檔案,在無qt環境的電腦上運作時,如上報錯

參考:This application failed to start because it could not find or load the Qt platforms plugins

解決:将Qt5.7.1\5.7\msvc2013\plugins\platforms目錄複制到exe所在檔案夾即可。

14. 無法打開源檔案,找不到Qt裡面的庫,程式有好多紅色的波浪線

參考:vs2013+QT5.5.0的環境搭建過程和常見錯誤總結

解決:打開main.cpp,單擊生成–>生成解決方案,會有連結錯誤,因為VS2013找不到QT程式庫。

接下來右擊項目>t屬性>配置屬性>C/C++>正常,編輯“附加包含目錄”,找到QT的安裝目錄下的include檔案夾的路徑,将它添加進“附加包含目錄”裡面,然後一路确認即可。重新編譯程式,編譯通過。

注意:如果上一步的Qt Options未配置成功,則在建立這個Qt Applicaiton時候會出現錯誤:“Unable to find Qt build!”

15. 檢測到RuntimeLibrary的不比對項,值“MTd_StaticDebug"不比對

VS2013 BUG合集一、生成解決方案出錯(編譯出錯)二、編譯沒問題,調試有問題7. Expression: (“Buffer too small”,0)8. Expression: vector subscript out of range

參考:visual studio 2015中使用opencv時遇到的一些問題

原因:注意到StaticDebug,意識到可能是靜态庫的問題。最後發現是庫檔案包含目錄裡,除了lib以外,還自作聰明的添加了staticslib,删除這個目錄包含就沒這個問題了,其實我以前在其他版本也包含過,沒出過錯,可能是版本檔案問題。

遇到這類的問題,一定是opencv配置出了錯,反複檢查。

16. 未加載opencv_core2413.pdb

(雖然我還沒遇到過這種問題,但是感覺說的很有道理的樣子,先存起來)

參考:visual studio 2015中使用opencv時遇到的一些問題

VS2013 BUG合集一、生成解決方案出錯(編譯出錯)二、編譯沒問題,調試有問題7. Expression: (“Buffer too small”,0)8. Expression: vector subscript out of range

解決:其實當時遇到這個問題解決不了,我就覺得應該用cmake把opencv編譯一下生成pdb檔案,直接把整個編譯好的檔案拷到項目中,連路徑都不用折騰。但當時cmake失敗了(回頭會寫這個)。

後面在百度的四五頁的答案中,終于有人提到了類似的,說直接把這個檔案拷到項目檔案下或是系統檔案裡,肯定能直接加載。

為了以後再出現這種問題,我直接把所有的庫檔案都拷到了系統目錄了。x64系統的是c:/Windows:/SySWOW64,32位系統的是c:/Windows:/System32,如下圖路徑。拷過去之後重新開機電腦就可以了。也可以拷到項目檔案目錄裡。回頭還是想編譯一波。

17. error C4996: -D_SCL_SECURE_NO_WARNINGS

參考1:vs error C4996 : -D_SCL_SECURE_NO_WARNINGS

原因:對C++标準庫任何可能的不安全的調用都會導緻C4996的錯誤

解決:上策是改實參類型等來規範調用,下策是屏蔽警告。方法如下:

-D即difine a macro定義宏。在屬性頁、C/C++、預處理器、預處理器定義添加_SCL_SECURE_NO_WARNINGS即可,如圖

VS2013 BUG合集一、生成解決方案出錯(編譯出錯)二、編譯沒問題,調試有問題7. Expression: (“Buffer too small”,0)8. Expression: vector subscript out of range

PS:按理說在.cpp檔案頂部添加#define _SCL_SECURE_NO_WARNINGS也可,但會有如下警告:

warning C4603: ‘_SCL_SECURE_NO_WARNINGS’ : macro is not defined or definition is different after precompiled header use

故還是優先使用第一種方法吧。

參考2:VS2013編譯錯誤:-D_SCL_SECURE_NO_WARNINGS解決方案

VS2013 BUG合集一、生成解決方案出錯(編譯出錯)二、編譯沒問題,調試有問題7. Expression: (“Buffer too small”,0)8. Expression: vector subscript out of range

18. error:C4996 ×× is deprecated, please use the ×× function instead.

error C4996: ‘pcl::ConditionalRemoval::ConditionalRemoval’: ConditionalRemoval(ConditionBasePtr condition, bool extract_removed_indices = false) is deprecated, please use the setCondition (ConditionBasePtr condition) function instead.

簡單的條件濾波就出現上面這個錯誤

解決:屬性——C/C++——正常 SDL檢查改為“否”就可以了

原因:

參考:windows安全警告與SDL檢查

vs解決無符号類型,安全開發生命周期(SDL)檢查

大概好像就是SDL(安全開發生命周期)檢查這個功能是微軟新推出的,為了能更好的監管開發者的代碼安全,如果勾選上這一項,那麼他将嚴格按照SDL的規則編譯代碼,會有一些以前常用的函數無法通過編譯,比如在VS2010中的scanf是warning那麼在VS2012中就是error了。

還有下面這些情況,本來應該是警告的,但是開啟SDL檢查之後,就會視為錯誤,編譯報錯

VS2013 BUG合集一、生成解決方案出錯(編譯出錯)二、編譯沒問題,調試有問題7. Expression: (“Buffer too small”,0)8. Expression: vector subscript out of range

19. error MSB8031: Building an MFC project for a non-Unicode character set is deprecated.

參考:解決:錯誤 1 error MSB8031: Building an MFC project for a non-Unicode character set is deprecated.

原因:VS2013及以上版本,缺少MFC MBCS DLL附加元件。其中MBCS為多位元組字元編碼。

解決:

a.點選http://go.microsoft.com/fwlink/p/?LinkId=286820

b.選擇所對應的VS版本。

c.點選 Multibyte MFC Library for Visual Studio 2013、2015(根據自己版本所定)

d.選擇中文,下載下傳,安裝。

注意:安裝過程需要以管理者身份運作。

插件下載下傳下來安裝好,重新開機VS2013,就沒錯誤啦!

下載下傳路徑:https://www.microsoft.com/zh-CN/download/details.aspx?id=40770

20. error C2056:"M_PI"未聲明的辨別符

lntelliSense:未定義辨別符“M_PI”

學習eigen庫用到M_PI,以前程式裡也用到了,沒有報錯,滑鼠放上去還會顯示(程式前面也沒有宏定義啥的,也沒加多餘的頭檔案啊)

VS2013 BUG合集一、生成解決方案出錯(編譯出錯)二、編譯沒問題,調試有問題7. Expression: (“Buffer too small”,0)8. Expression: vector subscript out of range
VS2013 BUG合集一、生成解決方案出錯(編譯出錯)二、編譯沒問題,調試有問題7. Expression: (“Buffer too small”,0)8. Expression: vector subscript out of range

但是新程式裡也有,就報錯了,無奈,不知道為啥

解決:

VS2017 C++ 程式報錯“error C2065: “M_PI”: 未聲明的辨別符"

項目——>”XXX屬性"——>配置屬性——>C/C++——>預處理器——>預處理器定義,将“_USE_MATH_DEFINES”添加進去

21. error LNK1561: 必須定義入口點

每個應用程式(檔案格式為exe)都應該有個啟動點,這個點就是main函數。缺少就會出現link error 。

但是我有呀,後來發現是“main"拼寫錯了!!!

22.

背景:計算點雲法向量的時候我定義點雲是XYZRGB格式,然後出來這麼多問題,後來改成XYZ格式就好了

VS2013 BUG合集一、生成解決方案出錯(編譯出錯)二、編譯沒問題,調試有問題7. Expression: (“Buffer too small”,0)8. Expression: vector subscript out of range

23. error C4996: ‘pcl::visualization::PCLVisualizer::addCoordinateSystem’: addCoordinateSystem (scale, x, y, z, viewport) is deprecated, please use function addCoordinateSystem (scale, x, y, z, id, viewport) with id a unique string identifier.

error C4996: ‘pcl::visualization::PCLVisualizer::addCoordinateSystem’: addCoordinateSystem (scale, x, y, z, viewport) is deprecated, please use function addCoordinateSystem (scale, x, y, z, id, viewport) with id a unique string identifier.

寫點雲顯示程式的時候,想要顯示坐标軸,但是一直有BUG,不知道咋回事,後來閱曆多了才知道,原來是這句話應該加上視窗id,就是視窗名字才行。

VS2013 BUG合集一、生成解決方案出錯(編譯出錯)二、編譯沒問題,調試有問題7. Expression: (“Buffer too small”,0)8. Expression: vector subscript out of range

24. error C2338: OBJECT_ALLOCATED_ON_STACK_IS_TOO_BIG

想定義一個矩陣,發現報錯:

error C2338: OBJECT_ALLOCATED_ON_STACK_IS_TOO_BIG

原來:

VS2013 BUG合集一、生成解決方案出錯(編譯出錯)二、編譯沒問題,調試有問題7. Expression: (“Buffer too small”,0)8. Expression: vector subscript out of range

解決:https://blog.csdn.net/u011341856/article/details/102882389

說是建立高維矩陣和運算的時候,報錯,主要原因是棧溢出。

隻要将建立的靜态矩陣,改成動态矩陣即可(矩陣維數是動态的,在指派或運算時,自動産生對應維數大小)

改成如下:

VS2013 BUG合集一、生成解決方案出錯(編譯出錯)二、編譯沒問題,調試有問題7. Expression: (“Buffer too small”,0)8. Expression: vector subscript out of range

有一點需要強調: 雖然我們可以使用任何次元的矩陣去指派或者初始化matrix_NN,但是始終沒有改變它是動态矩陣的性質,也就是維數運作過程始終可以變化,這一點兒不同于靜态矩陣,靜态矩陣編譯時就确定了次元,運作時不能變。

補充:靜态矩陣和動态矩陣的差別:

  動态矩陣和靜态矩陣:動态矩陣是指其大小在運作時确定,靜态矩陣是指其大小在編譯時确定。

  MatrixXd:表示任意大小的元素類型為double的矩陣變量,其大小隻有在運作時被指派之後才能知道。

  Matrix3d:表示元素類型為double大小為3*3的矩陣變量,其大小在編譯時就知道。

二、編譯沒問題,調試有問題

1. opencv_world300.dll 處有未經處理的異常

原因:樣子和下面問題一樣的,後來發現是release和debug的lib檔案配置到一起的原因,之前因為看到安裝庫裡檔案都在一起,路徑是一個,之前測試的時候放在一起也沒問題,現在莫名其妙又不可以了,唉,不過解決了問題就好!

轉載:[opencv imwrite報錯:關于opencv_world300.dll](https://blog.csdn.net/sanningjing/article/details/55261469)

重新學習opencv,載入/顯示圖像都沒有問題,加入imwrite後,程式報錯,報錯如下,直接上圖:

VS2013 BUG合集一、生成解決方案出錯(編譯出錯)二、編譯沒問題,調試有問題7. Expression: (“Buffer too small”,0)8. Expression: vector subscript out of range
VS2013 BUG合集一、生成解決方案出錯(編譯出錯)二、編譯沒問題,調試有問題7. Expression: (“Buffer too small”,0)8. Expression: vector subscript out of range

原因是lib檔案配置問題。

解決方法如下:

删除配置中的realse版本需要的lib檔案。同樣的問題,還出在X86/X64檔案不能同時載入的問題。如果 有問題,就删除一個,如果無問題,就正常使用吧。

我用過兩台機子,一台同時都配置沒有問題,一台就有問題。

VS2013 BUG合集一、生成解決方案出錯(編譯出錯)二、編譯沒問題,調試有問題7. Expression: (“Buffer too small”,0)8. Expression: vector subscript out of range

解決:opencv配置中連結器-輸入-附加依賴項裡realease的lib檔案都删掉就好了

2. 有未經處理異常

生成解決方案沒問題,但是無法調試

VS2013 BUG合集一、生成解決方案出錯(編譯出錯)二、編譯沒問題,調試有問題7. Expression: (“Buffer too small”,0)8. Expression: vector subscript out of range
VS2013 BUG合集一、生成解決方案出錯(編譯出錯)二、編譯沒問題,調試有問題7. Expression: (“Buffer too small”,0)8. Expression: vector subscript out of range

3. 未加載wntdll.pdb

編寫程式的時候在編譯的過程中出現了一個對話框提示程式已經出現一個斷點,然後跳轉界面提示未加載 wntdll.pdb,無法查找或打開 PDB 檔案。

解決:

調試——選項和設定——調試——符号——勾選Microsoft符号伺服器

VS2013 BUG合集一、生成解決方案出錯(編譯出錯)二、編譯沒問題,調試有問題7. Expression: (“Buffer too small”,0)8. Expression: vector subscript out of range

4. 無法找到“test_vtk.exe”調試資訊,或者調試資訊不比對。未使用調試資訊生成二級制檔案。是否繼續調試?

release環境下無法調試,隻能直接運作不調試,否則會有以上錯誤

VS2013 BUG合集一、生成解決方案出錯(編譯出錯)二、編譯沒問題,調試有問題7. Expression: (“Buffer too small”,0)8. Expression: vector subscript out of range

5. 應用程式無法正常啟動(0xc000007b)(未解決!!!)

驚天大BUG!

我測試64位的PCL庫時出現的,以為是PCL安裝或者配置的不對,後來又回頭測試vtk64位的時候,之前測試沒問題運作成功的,結果這次就不行,載在這個BUG上了。我還解決不了,合理推測,其他庫64位環境估計也運作不成功。我費了半天勁配置的估計不能用了,允悲!!!

掙紮過程見:PCL1.8.0測試

6. Debug Assertion Failed!

Expression: _pFirstBlock == pHead

VS2013 BUG合集一、生成解決方案出錯(編譯出錯)二、編譯沒問題,調試有問題7. Expression: (“Buffer too small”,0)8. Expression: vector subscript out of range

中止後:

VS2013 BUG合集一、生成解決方案出錯(編譯出錯)二、編譯沒問題,調試有問題7. Expression: (“Buffer too small”,0)8. Expression: vector subscript out of range

原因:參考:

Debug Assertion Failed! Expression: _pFirstBlock == pHead

【Debug Assertion Failed!Expression:_pFirstBlock == pHead vs2013程式設計錯誤】

我之前遇到過要改MTd的問題,但是沒啥用,會有死循環,和上述參考的部落客一樣的問題,是以這次沒有改。

Debug Assertion Failed!查找問題所在方法

上面這個是大佬的方法,完全不懂,先放着吧

解決:上面有說到混用release和debug檔案,是以我又檢查了一遍配置,發現沒什麼用。再出現問題,我直接點忽略,一直忽略,好像也可以出結果,沒啥影響哈哈哈

2020.6.2

由于我實在是沒辦法了,現在一個簡單的讀取ply檔案,顯示點雲的程式都會出這個錯誤,于是又搜了點解決方法,有幾個是說opencv和VS版本對應不上,我檢查的一下好像沒啥錯,VS2013對應的vc12。後來死馬當活馬醫的試了一下把MTd改成MDd,居然沒報錯?居然還成功了!

工程上右鍵-》屬性-》C/C++=》所有選項,改成MDd就好了!(就是參考第一個連結)

VS2013 BUG合集一、生成解決方案出錯(編譯出錯)二、編譯沒問題,調試有問題7. Expression: (“Buffer too small”,0)8. Expression: vector subscript out of range

而且我這兩個問題也解決了:原來配置的PCL好好的沒問題,但是測試的時候莫名其妙就出現這兩個問題,感覺是缺少這個boost的lib檔案,但是後來單獨編譯了boost(沒有s的和有s的都可以用)配置好加上沒有boost的PCL放在一起才沒錯誤,但是會有Debug Assertion Failed!這個問題,改好這個問題之後,再用這個配置好的庫,也沒有下面這個問題啦!

VS2013 BUG合集一、生成解決方案出錯(編譯出錯)二、編譯沒問題,調試有問題7. Expression: (“Buffer too small”,0)8. Expression: vector subscript out of range

Expression: invalid null pointer

問題描述:

VS2013 BUG合集一、生成解決方案出錯(編譯出錯)二、編譯沒問題,調試有問題7. Expression: (“Buffer too small”,0)8. Expression: vector subscript out of range

項目場景:

  1. 計算點雲的主方向時,複制的别人的程式,生成解決方案沒有問題,調試的時候有問題了。

    原因分析:

    搜原因時大部分這樣說的,說到指針,但是沒看太懂:invalid null pointer

    但是想到和我之前寫的代碼不同的地方,大概知道是這裡的原因

    VS2013 BUG合集一、生成解決方案出錯(編譯出錯)二、編譯沒問題,調試有問題7. Expression: (“Buffer too small”,0)8. Expression: vector subscript out of range
  2. 還有一次複制人家的SAC-IA粗配準的代碼,他讀取檔案也是這麼寫的,同樣出現這個BUG,當時看其他代碼很累了,就懶得搞這個,現在重新看了,一下就解決啦
    VS2013 BUG合集一、生成解決方案出錯(編譯出錯)二、編譯沒問題,調試有問題7. Expression: (“Buffer too small”,0)8. Expression: vector subscript out of range

解決方案:

由于具體原因不太清楚,即不知道argv[1]是幹啥的,于是老老實實換自己讀取檔案的代碼,解決啦

VS2013 BUG合集一、生成解決方案出錯(編譯出錯)二、編譯沒問題,調試有問題7. Expression: (“Buffer too small”,0)8. Expression: vector subscript out of range

7. Expression: (“Buffer too small”,0)

Kinect擷取資料的接口程式,用相機參數自己對齊的程式(KienctThird),畢設的時候忘記有沒有問題了,但是這次出現這個BUG:

VS2013 BUG合集一、生成解決方案出錯(編譯出錯)二、編譯沒問題,調試有問題7. Expression: (“Buffer too small”,0)8. Expression: vector subscript out of range

點選重試之後跳轉到這裡,由上面提示的地方:

File: f:\dd\vctools\crt\crtw32\stdio\vsprintf.c

以及下面跳轉的這個檔案還有函數,還有這個程式可以顯示結果(即顯示圖檔),但當我按空格鍵要儲存的時候就優BUG提示了,綜上,我猜測問題出在儲存檔案的位置,應該是這個函數:springf_s()出了問題

VS2013 BUG合集一、生成解決方案出錯(編譯出錯)二、編譯沒問題,調試有問題7. Expression: (“Buffer too small”,0)8. Expression: vector subscript out of range

然後突然想到我能夠運作正常的函數,這裡是64,而這個程式寫的32,改成64之後就沒問題了

VS2013 BUG合集一、生成解決方案出錯(編譯出錯)二、編譯沒問題,調試有問題7. Expression: (“Buffer too small”,0)8. Expression: vector subscript out of range
VS2013 BUG合集一、生成解決方案出錯(編譯出錯)二、編譯沒問題,調試有問題7. Expression: (“Buffer too small”,0)8. Expression: vector subscript out of range

(不過不知道為啥,同樣的儲存檔案啊,人家32就可以好好的,我去年做畢設用這個程式的時候估計也有這個問題,但是當時也不知為啥,是以寫了備注哈哈哈)

8. Expression: vector subscript out of range

Program: C:\WINDOWS\SYSTEM32\MSVCP120D.dll

File: f:\microsoft visual studio 12.0\vc\include\vector

Line: 1185

VS2013 BUG合集一、生成解決方案出錯(編譯出錯)二、編譯沒問題,調試有問題7. Expression: (“Buffer too small”,0)8. Expression: vector subscript out of range

點選重試,跳轉到這裡:

VS2013 BUG合集一、生成解決方案出錯(編譯出錯)二、編譯沒問題,調試有問題7. Expression: (“Buffer too small”,0)8. Expression: vector subscript out of range

然後繼續運作,出現這個BUG提示:

Program: E:\Program\1_obtain_data\2-obtain_data\Debug\end_obtain_data.exe

File: f:\microsoft visual studio 12.0\vc\include\vector

Line: 1202

Expression: “Standard C++ Libraries Out of Range” && 0

VS2013 BUG合集一、生成解決方案出錯(編譯出錯)二、編譯沒問題,調試有問題7. Expression: (“Buffer too small”,0)8. Expression: vector subscript out of range

點選重試,跳轉到這裡:

VS2013 BUG合集一、生成解決方案出錯(編譯出錯)二、編譯沒問題,調試有問題7. Expression: (“Buffer too small”,0)8. Expression: vector subscript out of range

然後繼續運作,跳轉到這裡:

0x0196A893 (msvcr120d.dll) (end_obtain_data.exe 中)處有未經處理的異常: 将一個無效參數傳遞給了将無效參數視為嚴重錯誤的函數。

VS2013 BUG合集一、生成解決方案出錯(編譯出錯)二、編譯沒問題,調試有問題7. Expression: (“Buffer too small”,0)8. Expression: vector subscript out of range
VS2013 BUG合集一、生成解決方案出錯(編譯出錯)二、編譯沒問題,調試有問題7. Expression: (“Buffer too small”,0)8. Expression: vector subscript out of range

根據第一次出現的BUG提示,估計又是vector的問題,然鵝我不知道這個vector是幹啥用的。

2020.6.8 解決啦!

問題出自Kinect擷取資料的接口程式,我想直接把參數儲存到點雲的xyz坐标,但是就有問題了。當時和不儲存為ply點雲檔案的相同程式對比,那個沒有問題,是以問題就出在儲存點雲檔案這裡,然後通過注釋掉儲存ply的語句發現錯誤不在這,然後注釋掉指派語句之後錯誤就沒有了,是以指派語句應該是錯的。

VS2013 BUG合集一、生成解決方案出錯(編譯出錯)二、編譯沒問題,調試有問題7. Expression: (“Buffer too small”,0)8. Expression: vector subscript out of range

這個是我直接複制的我正常運作的程式裡的,以為沒什麼問題,由于沒有完全搞懂怎麼指派的,感覺i就是一個擺設,一個公式的模闆,就沒多想。

後來調試的時候,一到這裡就出BUG,然後監視了一下i的值才發現,它太大了,起始值就512*424這麼大了,怪不得會溢出。後來發現i這個變量程式前半部分有用到,沒有置零,是以就這個樣子了,修改之後就沒問題啦!

VS2013 BUG合集一、生成解決方案出錯(編譯出錯)二、編譯沒問題,調試有問題7. Expression: (“Buffer too small”,0)8. Expression: vector subscript out of range

9. Error: no override found for ‘vtkPolyDataMapper’.

Generic Warning: In F:\PCLdon\VTK-7.0.0\Rendering\Core\vtkPolyDataMapper.cxx, line 28

Error: no override found for ‘vtkPolyDataMapper’.

VS2013 BUG合集一、生成解決方案出錯(編譯出錯)二、編譯沒問題,調試有問題7. Expression: (“Buffer too small”,0)8. Expression: vector subscript out of range
VS2013 BUG合集一、生成解決方案出錯(編譯出錯)二、編譯沒問題,調試有問題7. Expression: (“Buffer too small”,0)8. Expression: vector subscript out of range

解決:

參考:VTK編譯中出現 no override found for vtkpolydatamapper 解決方法

程式上面加入一下語句即可

#include "vtkAutoInit.h" 
VTK_MODULE_INIT(vtkRenderingOpenGL2); // VTK was built with vtkRenderingOpenGL2
VTK_MODULE_INIT(vtkInteractionStyle);
           

10. Assertion failed: point_representation_->isValid (point) && “Invalid (NaN, Inf) point coordinates given to nearestKSearch!”

Assertion failed: point_representation_->isValid (point) && “Invalid (NaN, Inf) point coordinates given to nearestKSearch!”, file F:\PCLdon\pcl-master\kdtree\include\pcl/kdtree/impl/kdtree_flann.hpp, line 136

VS2013 BUG合集一、生成解決方案出錯(編譯出錯)二、編譯沒問題,調試有問題7. Expression: (“Buffer too small”,0)8. Expression: vector subscript out of range

背景:ICP配準。

原因:

一開始查的都是因為資料裡有NAN值,是以我先去除之後發現并沒有什麼用,還有錯誤,問題還是出在配準那個地方。于是用以前剛學ICP時的程式運作同樣的資料發現沒問題,但是用的函數不太一樣,沒問題那個程式裡用的IterativeClosestPoint,有問題的程式用的是

IterativeClosestPointWithNormals。我把函數換成IterativeClosestPoint之後就沒問題了。于是覺得可能是我資料問題,果然,檢視我之前計算法向量的程式,儲存的時候隻儲存了點雲沒有儲存法向量,是以這裡用IterativeClosestPointWithNormals函數就有問題了。

一開始沒有發現是因為讀取資料的時候沒問題,我讀取的時候是按照格式PointNormal讀取的,他沒有法向量居然還能讀取不報錯,還顯示讀取了多少個點,于是我就被迷惑了。

11. [pcl::registration::CorrespondenceEstimation::setInputTarget] Invalid or empty point cloud dataset given!

[pcl::registration::CorrespondenceEstimation::compute] No input target dataset was given!

VS2013 BUG合集一、生成解決方案出錯(編譯出錯)二、編譯沒問題,調試有問題7. Expression: (“Buffer too small”,0)8. Expression: vector subscript out of range
VS2013 BUG合集一、生成解決方案出錯(編譯出錯)二、編譯沒問題,調試有問題7. Expression: (“Buffer too small”,0)8. Expression: vector subscript out of range
VS2013 BUG合集一、生成解決方案出錯(編譯出錯)二、編譯沒問題,調試有問題7. Expression: (“Buffer too small”,0)8. Expression: vector subscript out of range

背景:計算兩片點雲對應點時,輸入.ply檔案,結果出現這個問題:找不到輸入目标資料集(用到pcl::registration::CorrespondenceEstimation這個類)

原因:未知

應該是輸入的問題,但是我設定檢視輸入點雲數量顯示正确,說明讀取沒問題。那應該是輸入這個類的時候有問題。但是不知道具體原因。

VS2013 BUG合集一、生成解決方案出錯(編譯出錯)二、編譯沒問題,調試有問題7. Expression: (“Buffer too small”,0)8. Expression: vector subscript out of range

解決:因為報錯終止後就跳轉到存儲PCD檔案的頭檔案源代碼裡了,于是我嘗試輸入檔案是.pcd檔案,發現不報錯了。。。不知道為啥不能用ply檔案(記得剛接觸PCL和C++的時候也是搞半天輸入ply就是出錯,隻能用pcd,後來才發現原來輸入不同格式的檔案要不同的頭檔案,但是現在這個我又不知道了,可能很久之後才會回來填坑吧)

繼續閱讀