VTKBug——VTK8.1运行时出错:0xC0000005: 读取位置 0x00000000 时发生访问冲突

时间:2022-04-02 13:24:00

写在前面

重新捡起VTK(由于实验室项目要求),在Win10操作系统、VS2015环境上成功配置VTK8.1之后,运行之前VTK圆柱体程序,程序编译通过,但是运行出错。查阅资料,将目前对于这个问题的理解记录如下。

Bug提示

VTKBug——VTK8.1运行时出错:0xC0000005: 读取位置 0x00000000 时发生访问冲突

Bug原因

遇见这种问题一般都是空指针,即:指针里没有赋值。如果你对null 进行操作就会产生空指针异常。类似常见错误可以参考:0xC0000005: 读取位置 0x00000000 时发生访问冲突

根据VTK官方解释:VTK/VTK 6 Migration/Factories now require defines。英文不喜欢看,可以看一下中文的:VTK/VTK6 迁移/“工厂化”需要的定义

可以从中发现之前的代码由于是VTK5.10.1版本写的,可以正常运行,但是在VTK6之后的版本,VTK采用了工厂模式,而工厂模式需要“自动初始化”,具体取决于在VTK配置时启用哪些模块。 如果您启用所有模块,并在不使用CMake的情况下构建项目,则需要在项目中进行一些定义,以使工厂正常工作。

9月10号, 2013,有一个新的宏添加进来,可以让这个过程更加简单。

解决方法

在源文件头部添加代码:

#include "vtkAutoInit.h" 
VTK_MODULE_INIT(vtkRenderingOpenGL2);
VTK_MODULE_INIT(vtkInteractionStyle);

即可解决。类似的文章还可以参考:

写在后面

目前只能用这种方法解决这一个问题,但是我感觉问题的关键我还是没有搞懂,还会继续研究的。有新的内容会在这篇博客进行更新。目前先记录一下。