gpt4 book ai didi

c++ - libpng 在 png_write_into 上崩溃(Windows 10,VS2013,自建,所有测试通过 ok)

转载 作者:可可西里 更新时间:2023-11-01 14:17:43 26 4
gpt4 key购买 nike

当调用 png_write_info 时,我观察到由于 libpng (1.6.20) 中的访问冲突导致的崩溃。我已经从源代码(包括 zlib 1.2.8)构建了 libpng,并且 libpng 源代码附带的 png 测试全部通过,没有任何错误。我可以确认在这些测试期间正在创建良好的 png 文件。

我的程序的简单分解(直到崩溃)如下所示。出于简单原因,我删除了所有错误和边界检查:

int main(int argc, char *argv[]) {
char* filename = argv[1];
png_structp png = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
png_infop info = png_create_info_struct(png);
if (setjmp(png_jmpbuf(png)))
{
abort();
}

// Output is 16-bit depth, greyscale format.
png_set_IHDR(
png,
info,
127, 127,
16,
PNG_COLOR_TYPE_GRAY,
PNG_INTERLACE_NONE,
PNG_COMPRESSION_TYPE_DEFAULT,
PNG_FILTER_TYPE_DEFAULT
);

// do the file stuff
FILE *fp;
errno_t error = fopen_s(&fp, filename, "wb");
png_init_io(png, fp);
png_write_info(png, info); // <-- crashes here with "access violation writing location ..."

感谢您的帮助!

代码源

最佳答案

好的,由于这里发布的另一个问题,我得到了这个问题的答案: libpng crashes on png_read_info()

答案是:

If you don't use the Visual Studio defaults your application must still be built with the default runtime option (/MD). If, for some reason, it is not then your application will crash inside libpng16.dll as soon as libpng tries to read from a file handle you pass in.

因此我重新编译了我的 libpng,将属性->配置属性->C/C++->代码生成->运行时库设置为多线程 DLL (/MD)(不是调试!!)并为我的 png-writer 项目设置相同的设置。现在它可以正常工作,不会再崩溃了。

干杯,
代码源

关于c++ - libpng 在 png_write_into 上崩溃(Windows 10,VS2013,自建,所有测试通过 ok),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34309014/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com