c – libpng在png_write_into崩溃(Windows 10,VS2013,自建,所有测试都通过了)

c – libpng在png_write_into崩溃(Windows 10,VS2013,自建,所有测试都通过了),第1张

概述我在调用png_write_info时观察到由于libpng(1.6.20)中的访问冲突导致的崩溃.我从源代码构建了libpng(包括zlib 1.2.8),libpng源代码附带的png测试都没有任何错误.我可以确认在这些测试期间正在创建好的png文件. 我的程序的简单细分(直到崩溃的地方)看起来像这样.为简单起见,我删除了所有错误和边界检查: int main(int argc, char * 我在调用png_write_info时观察到由于libpng(1.6.20)中的访问冲突导致的崩溃.我从源代码构建了libpng(包括zlib 1.2.8),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);    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,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 ..."

谢谢你的帮助!

codeSourcerer

解决方法 好的,我得到了这个问题的答案,这要归功于此处发布的另一个问题:
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项目设置相同的内容.现在它正在工作,不再崩溃了.

干杯,codeSourcerer

@H_403_44@ 总结

以上是内存溢出为你收集整理的c – libpng在png_write_into崩溃(Windows 10,VS2013,自建,所有测试都通过了)全部内容,希望文章能够帮你解决c – libpng在png_write_into崩溃(Windows 10,VS2013,自建,所有测试都通过了)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1228017.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存