2011-08-03 48 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 ...?你不相信魔法吗? :-) –