【发布时间】:2015-05-26 08:37:00
【问题描述】:
我是win7 64位家庭版。我的所有项目都设置为使用 C++ 在 32 位环境中构建。我已经使用 MDd 运行时在调试模式下成功构建了 libpng。我有两个活跃的项目。我的第一个项目是在 VS2010 中,我的第二个项目是在 VS2012 中。在我的计算机中,我创建了一个设置为该库路径的环境变量,以使我的项目中的链接更容易。我的两个项目都使用 MDd 以及 libpng 使用的多字节。我所有的路径和依赖项都是正确的。我还将 libpng16.dll 复制到与它们构建的可执行文件相同的目录中的两个项目中。我可以成功编译和构建这两个项目。我的 VS2010 项目运行并渲染加载的 PNG 图形,但是我在 VS2012 中的项目没有。当我调用 png_read_png 抛出并在此行中断的未处理异常时,它会崩溃:
check = fread( data, 1, length, png_voidcast( png_FILE_p, png_ptr->io_ptr ) );
在 pngrio.c 中。给出这个错误:
First-chance exception at 0x77308E19 (ntdll.dll) in Game_debug.exe: 0xC0000005:
Access violation writing location 0x00000014.
问题不在我的源代码中,因为我知道它在我的 VS2010 项目中有效,并且我正在使用相同的实现在我的 VS2012 项目中加载 png。我不确定我要链接到的库是在 VS2010 中构建的,还是我的 VS2012 项目不喜欢的 VS2010 构建库中有一些命令行/编译器设置是否会有所不同。我已经阅读了 png 文档并在网上搜索了几个小时,但似乎找不到任何相关的东西。任何形式的帮助、提示、指示或建议都会对我有很大帮助。
【问题讨论】:
-
我打赌你的
png_ptr是NULL。可以用调试器什么的吗? -
导致崩溃的不是我的项目,而是 PNG 库。当我将它链接到我的 VS2010 项目时,这个库工作正常,但当我将它链接到我的 VS2012 项目时崩溃。我使用相同的路径/s 和库来链接和构建,使用相同的运行时库构建约定,并使用相同的方法来读取和创建用于渲染的 png 纹理。在调用 png_read_png() 之前,libpng 还使用了其他函数,它们会打开并验证该文件是否为有效的 PNG 文件。
-
我不是在寻找责备。我只是说这个指针很可能是
NULL。 -
我明白了,非常感谢您的回复。
标签: c++ visual-studio-2012 access-violation libpng first-chance-exception