0

我从 libjpeg 示例中复制了这段代码,并将其传递给标准文件;

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 又因访问冲突而失败。

编辑:在使用 ijg 进一步挖掘
JPEG 支持后 - 获取访问冲突

4

2 回答 2

2

使用 strerror 或 perror 获取确切原因:

FILE *soureFile;
if ((soureFile = fopen(sourceFilename, "rb")) == NULL)
{
    perror("fopen failed");
    exit(1);
}
于 2009-06-02T12:18:36.163 回答
1

select没有坏”。

如果fopen返回一个有效的文件指针,并且jpeg_read_header不能使用它,那么这两个语句之间的某个人对它做了坏事。

唯一介于两者之间的是jpg_stdio_src调用,如果满足所有先决条件,它就不会失败。

底线:看看为什么jpg_stdio_src会失败。jpeg_create_decompress我的猜测:它需要使用宏来构造。

于 2009-06-02T13:00:42.680 回答