PCL loadPCDFile()错误

时间:2016-02-15 07:15:40

标签: c++ point-cloud-library point-clouds

一旦我用Visual C ++ 2013 x64成功编译了PCL,我就完全堆积了尝试调试以下错误。使用pcl :: io :: loadPCDFile()加载.pcd文件时,我的调试断言失败,然后出现一些访问冲突错误。

std::string fileName = "E:/C PROJECTS/models/generated.pcd";

    target_cloud.reset(new Cloud());

    if (pcl::io::loadPCDFile(model_filename_, *target_cloud) == -1) //* load the file
    {
        PCL_ERROR("Couldn't read .pcd file \n");
        return (-1);
    }

enter image description here

enter image description here

1 个答案:

答案 0 :(得分:1)

此错误(几乎)确定您将两个不同的CRT(C运行时库)链接到您的程序。每个CRT都有自己的内存分配堆。一个CRT释放了一些实际上由另一个CRT分配的东西,并且当释放CRT试图将释放的内存添加到它自己的堆中时,发现它不属于那里,导致断言。

可能,您的PCL被编译为使用与您的项目使用的CRT不同的CRT。打开PCL解决方案,打开项目设置,然后检查C / C ++中的设置 - >代码生成 - >运行时库。然后在您自己的项目解决方案中执行相同操作,检查它们是否匹配。

您还需要使用相同版本的Visual Studio编译PCL和您的项目(因为每个新版本似乎都带有一组新的CRT ......叹息)。

作为最后的手段,您还可以检查“输出”窗口并记下正在加载的DLL,并查看是否可以发现多个不兼容的CRT。您可以在以下网址找到有关文件名的信息:https://support.microsoft.com/en-us/kb/140584或使用谷歌。

如果你真的想为你的项目使用特定的CRT,你必须重新编译PCL才能使用你想要的CRT。