VCGlib中的示例代码使Visual Studio 2013崩溃
Sample code from VCGlib crashes Visual Studio 2013
我现在正在学习vcglib(http://vcg.sf.net)
我的问题是,当我尝试在"Locals"或"Auto"窗口中检查变量时,以下代码会导致VS 2013崩溃。
std::vector<cl_float4> cloud;
std::vector<cl_uchar4> colors;
std::vector<cl_int> valid;
fetchCloud(cloud);
fetchColors(cloud, colors, valid);
class CFace;
class CVertex;
struct MyUsedTypes : public vcg::UsedTypes<
vcg::Use<CVertex> ::AsVertexType,
vcg::Use<CFace> ::AsFaceType> {};
/// compositing wanted proprieties
class CVertex : public vcg::Vertex< MyUsedTypes, vcg::vertex::Coord3f, vcg::vertex::Normal3f, vcg::vertex::Color4b, vcg::vertex::BitFlags> {};
class CFace : public vcg::Face< MyUsedTypes, vcg::face::VertexRef, vcg::face::Normal3f, vcg::face::BitFlags > {};
class CMesh : public vcg::tri::TriMesh< std::vector<CFace>, std::vector<CVertex> > {};
CMesh m;
for (size_t k = 0; k < cloud.size(); ++k) {
if (valid[k]) {
vcg::tri::Allocator<CMesh>::AddVertex(m,
CMesh::CoordType(cloud[k].s[0], cloud[k].s[1], cloud[k].s[2]),
vcg::Color4b(colors[k].s[0], colors[k].s[1], colors[k].s[2], 255)
);
}
}
cout << "saving to file...";
vcg::tri::io::PlyInfo info;
info.mask |= vcg::tri::io::Mask::IOM_VERTCOLOR;
vcg::tri::io::ExporterPLY<CMesh>::Save(m, (base_name + ".ply").c_str(), false, info);
cout << "saved" << endl;
上述中的CCD_ 1具有从50000到100000的元素。该点云是使用OpenCL在GPU内存中计算的。功能fetchCloud
和fetchColors
将各自的数据下载到主机存储器。
我已经从vcglib
提供的trimesh_ant_freeglut sample
复制了上面的代码。
我还成功地在VS2013中编译并运行了这个示例。它运行良好,我可以随时在调试器中暂停它,并检查所有感兴趣的变量。
我还在示例中添加了一个代码,生成了1000000个随机点的云。当我暂停调试器中正在运行的示例并检查变量时,VS2013显示mesh
变量。
我的源代码和示例代码都作为不同的项目包含在同一个解决方案中。解决方案是使用CMake生成的。两个项目之间的主要区别在于使用了OpenCL。
如何调试此问题?我准备提供可能需要的额外信息。我只是不知道目前我应该提供什么。
更新:尝试禁用所有扩展-仍然没有成功。
Update2:请一位同事编译、运行和调试我的代码——他的Visual Studio安装也崩溃了。
Update3:下载Visual Studio更新RC2-再次,导致崩溃
Update4:尝试移动源文件中与class CMesh
相关的代码。结果不稳定。Visual Studio有时会崩溃,有时不会。如果代码正好在main
的左括号之后,则不会发生崩溃。如果此代码和int main(int argc, char **argv) {
之间出现某些指令,则可能发生崩溃。
我认为这段代码会破坏某个地方的堆栈,这是对的吗?
已解决!通过将类声明移动到cloud
0:之外
那是
class CFace;
class CVertex;
struct MyUsedTypes : public vcg::UsedTypes <
vcg::Use<CVertex> ::AsVertexType,
vcg::Use<CFace> ::AsFaceType > {};
/// compositing wanted proprieties
class CVertex : public vcg::Vertex < MyUsedTypes, vcg::vertex::Coord3f, vcg::vertex::Normal3f, vcg::vertex::Color4b, vcg::vertex::BitFlags > {};
class CFace : public vcg::Face < MyUsedTypes, vcg::face::VertexRef, vcg::face::Normal3f, vcg::face::BitFlags > {};
class CMesh : public vcg::tri::TriMesh < std::vector<CFace>, std::vector<CVertex> > {};
int main (int argc, char* argv[])
{
// blah-blah-blah
CMesh m;
// fill m
}
现在没有崩溃!
- Visual Studio 2015:Extern "C" 和 "export" 关键字
- 为cl.exe(Visual Studio代码)指定命令行C++版本
- 试图在visual studio上用C++创建一个桌面应用程序
- 如何在MS Visual Studio 2019中运行QT UI
- 如何使用Visual Studio 2017在C++中为参数化对象数组使用唯一指针
- Visual Studio Code - C++ Debugger 無法啟動
- Visual Studio 2019:插入多个C++风格的单行注释
- Visual Studio Code "undefined reference to `WinMain@16'"
- Visual studio代码重构似乎不起作用(例如,重命名符号-f2)
- Visual Studio中的函数声明和函数定义问题
- 如何指定我希望我的LIB链接到的DLL文件?-Visual Studio 2019
- Visual Studio mkl_link_tool.exe链接错误
- Visual Studio(或任何其他工具)能否将地址解释为调用堆栈(boost上下文)的开头
- 不同的Visual Studio版本中缺少.dll
- 用Visual Studio在C++中嵌入Julia
- Visual Studio 2017循环自动向量化问题
- 有没有办法在远程设备上打开和编辑visual Studio 2017解决方案
- 尝试使用继承和模板实现CRTP.Visual Studio正在生成编译器错误
- Visual Studio在尝试读取resource.txt文件时崩溃
- Visual Studio 2017 不允许我创建 C++ 专用模板