2012-06-15 32 views
1

我會嘗試以最好的方式提問我的問題:在libc中的錯誤?如何讀取轉儲文件?

我想使用來自相機制造商的示例代碼(在Ubuntu 11.10下從我的相機讀取圖像的示例代碼(只有一個名爲「main.cpp」的文件) 。如果我使用示例項目,一切工作正常,我收到圖像數據。但如果我將這個「main.cpp」添加到我的真實項目並編譯,應用程序崩潰。

確定導致此錯誤的部分非常困難。但是,如果我從我的代碼中刪除了一些代碼(這是編譯但明確未使用!),該程序按預期工作。我猜想在編譯代碼時(例如Opencv或boost?),我鏈接的另一個庫引發了一個錯誤。我試圖弄清楚哪一部分會導致這種行爲,但如果能夠在這段時間告訴我,我會很高興,如果可以從這個崩潰消息中提取有用的信息,可以找到on this Gist

我的libc損壞了嗎?

+0

您可能會發現將轉儲文件的內容粘貼到Gist或類似的東西,而不是文件共享站點很有用。 – kfb

+0

你可以添加代碼嗎? – Collin

+0

好的,下面是沒有文件共享站點的「dump.txt」:https://gist.github.com/2936131 – Anonymous

回答

0

libc中的錯誤?

*** glibc detected *** ./myProject: double free or corruption (!prev): 0x09c12660 ***

這個錯誤意味着你的應用程序以某種方式損壞堆。它可能有free兩次編輯相同的指針,或者它可能已經寫入已分配緩衝區的末尾。

找到這種堆腐敗錯誤的工具是Valgrind

事實上,只有當您連接額外的代碼時發生崩潰可能只是一個意外 - 該錯誤可能存在於應用程序中,即使沒有額外的代碼,但尚未表現在崩潰。

雖然不太可能,但額外的代碼引入了錯誤也是可能的。

在這兩種情況下,一旦您在Valgrind下運行應用程序,錯誤應該變得明顯。