2011-08-03 64 views
2

我正在使用Totalview來調試一些代碼,並且它正在停止一個總線錯誤。fopen()上的總線錯誤?

這是什麼,我該如何解決?這裏是代碼剪斷

在我的主:

char *infilename = "/home/dcole/Images/lena1024s.jpg"; 

    /* Try opening a jpeg*/ 
    if(read_jpeg_file(infilename) > 0) 
    { 
     //do some stuff  
    } 

功能:

int read_jpeg_file(const char *filename) 
{ 
     /* these are standard libjpeg structures for reading(decompression) */ 
     struct jpeg_decompress_struct cinfo; 
     struct jpeg_error_mgr jerr; 
     /* libjpeg data structure for storing one row, that is, scanline of an image */ 
     JSAMPROW row_pointer[1]; 

     FILE *infile = fopen(filename, "rb"); //this line is where the debugger stops with a Bus Error 
     unsigned long location = 0; 
     int i = 0; 

     if (!infile) 
     { 
       printf("Error opening jpeg file %s\n!", filename); 
       return -1; 
     } 
     return 1; 
} 

我傳遞中的文件不存在。我可以看到它在調試器中顯示爲正確的路徑。

+3

你是否已經開始使用調試器?哪條線出錯?另外,您可以顯示對read_jpeg_file的調用以及文件名參數的初始化/分配嗎? – Joe

+0

您是否嘗試過運行valgrind檢查內存損壞? – user786653

+0

當然 - 是的,我已經用Totalview加強了它。它有一個內存檢查器內置 – Derek

回答

-1

我認爲你有因爲文件名可變... 取而代之的存儲器訪問的問題: 字符* infilename =「/home/dcole/Images/lena1024s.jpg」;

嘗試使用: char infilename [] =「/home/dcole/Images/lena1024s.jpg」;

+0

同樣的事情在C++中...... – Torp

+0

是的,我知道它應該是同一件事,但它是一個不推薦使用的操作,並且您有這樣的警告:不推薦將字符串常量轉換爲'char *'。並且發送給fopen()的壞字符串指針會給出這種'總線錯誤'消息... –

+0

ho,爲什麼-1 ...?你不相信魔法嗎? :-) –