2011-08-03 7 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 *'로의 deprecated 변환. 그리고 fopen()에 보내지는 나쁜 문자열 포인터는 이런 종류의 '버스 오류'메시지를줍니다 ... –

+0

호, 왜 -1 ...? 마술을 믿지 않니? :-) –

관련 문제