2013-04-08 99 views
2

我試圖製作一個程序,將過濾器放在一個bmp文件。我運行它,並獲得在Mac GCC總線錯誤,我獲得的Linux機器執行以下操作:C編程總線錯誤/段錯誤

104:8:警告:變量「NEW_FILE」設置,但不使用[-Wunused - 丁SET-可變]
159:56:警告: '像素' 可以使用的未初始化在該函數[-Wuninitialized]
185:10:警告: 'bmpOut' 可以在此函數[-Wuninitialized]

可以使用未初始化

當我運行它時,我得到一個錯誤的核心轉儲。

有什麼你們看到這個錯誤?我認爲這與指針有關。

+7

您是否至少修復了您給出的警告?他們看起來很直接。 – chris 2013-04-08 01:29:47

+0

我試過了。我不確定如何解決這三個問題。當我刪除new_file時,我得到一個新的錯誤。 – RightLeftRight12 2013-04-08 01:30:51

+0

你可以通過調試器來運行它嗎? – chrisaycock 2013-04-08 01:30:55

回答

1

104:8:警告:變量「NEW_FILE」設置,但不使用[-Wunused,但設置變量]

這告訴你該變量new_file沒有任何影響你的邏輯如此之多。它不必要地使你的代碼複雜化;你可能應該刪除它。但是,這不會導致你的段錯誤。這更可能是後兩種:

159:56:警告:「像素」可以在這個函數[-Wuninitialized]

這是一個比較嚴重的問題,可以使用未初始化。在pixel[holdr*Height+holdc]之前,沒有什麼可以指定像素(一個指針)指向一個對象。在使用pixel[...]之前,您需要確保它指向某個東西!我建議沿着pixel = malloc(count * sizeof *pixel);的方向行事。

185:10:警告:「bmpOut」可以在這個函數中使用未初始化[-Wuninitialized]

再次,這是相當嚴重的!我認爲在寫入該文件之前,你會想讓tmpOut指向一個文件。我建議沿着tmpOut = fopen("/path/to/filename", "wb");tmpOut = stdout;的方向行事。

你有沒有考慮過使用valgrind?

+0

現在我得到一個錯誤的GDB說程序接收信號:「EXC_BAD_ACCESS爲線讀取holdRed + =矩陣[pixCounter] * rgb [holdr1 *高度+ holdc1]。紅色; – RightLeftRight12 2013-04-08 03:37:21

+0

矩陣可以存儲多少項目'print pixCounter '......你在讀哪本書? – Sebivor 2013-04-08 03:53:38