一旦我成功地使用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);
}
此错误是(几乎)肯定的信号,它表明您正在将两个不同的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或使用google。
如果您确实要为项目使用特定的CRT,则必须重新编译PCL才能使用所需的CRT。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句