2009-06-02 58 views
0

我從libjpeg例子中複製了這段代碼,並通過它傳遞標準文件;C++ fopen正在返回一個文件*與<bad ptr>的

FILE *soureFile; 
if ((soureFile = fopen(sourceFilename, "rb")) == NULL) 
{ 
    fprintf(stderr, "can't open %s\n", sourceFilename); 
    exit(1); 
} 

jpeg_stdio_src(&jpegDecompress, soureFile); 
jpeg_read_header(&jpegDecompress, true); 

它導致不包含任何信息,因此打破了與訪問衝突最後一行文件指針。 有什麼建議嗎?

編輯:根據Tobias的建議,fopen似乎確實打開文件,但jpeg_read_header反過來仍然失敗。

編輯:有點經過挖掘
JPEG support with ijg - getting access violation

+1

你確定代碼的其餘部分沒有錯,並且該文件包含你認爲它的作用嗎? – 2009-06-02 12:22:34

+0

我還不清楚。 fopen()上面的代碼是否返回NULL? – 2009-06-02 12:23:02

回答

1

select isn't broken」。

如果fopen返回一個有效的文件指針,並且jpeg_read_header不能使用它,那麼這兩個語句之間的某個人做了一些壞事。

中間唯一的一個是jpg_stdio_src調用,如果滿足所有先決條件,調用不會失敗。

底線:看看爲什麼jpg_stdio_src失敗。我的猜測:它需要使用宏構建。

2

使用字符串錯誤或PERROR得到確切的原因:

FILE *soureFile; 
if ((soureFile = fopen(sourceFilename, "rb")) == NULL) 
{ 
    perror("fopen failed"); 
    exit(1); 
}