一旦我用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);
}
答案 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。