2011-08-03 6 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の呼び出しとfilenameパラメータの初期化/割り当てを表示できますか? – Joe

+0

あなたはそれを実行しようとしましたか?メモリ破損をチェックするvalgrind? – user786653

+0

確かに - そして、私はTotalviewでそれを突き抜けました。それはメモリチェッカーを内蔵しています – Derek

答えて

-1

は、私はあなたのために、ファイル名の変数... 代わりのメモリアクセスの問題を抱えていると思う: のchar * inFileNameは=「/home/dcole/Images/lena1024s.jpg」。

試してみてください: char infilename [] = "/home/dcole/Images/lena1024s.jpg";

+0

C++の同じこと... – Torp

+0

はい、私は同じことになっていますが、廃止された操作であり、この警告があります:廃止予定の文字列定数から 'char *'への変換。そして、fopen()に送信された不正な文字列ポインタは、この種の「バスエラー」メッセージを返します。 –

+0

ho、なぜ-1 ...?あなたは魔法を信じていないのですか? :-) –